Как я могу отображать шведские символы в приложении Android?

У меня есть база данных, из которой я извлекаю данные в свой проект Android. Там есть несколько строк текста с шведскими буквами å, ä, ö, записанными в виде: √•=å, √§=ä, √δ=ö. Как лучше всего преобразовать эти символы в настоящие буквы, прежде чем я напечатаю их в текстовом представлении в приложении? Является ли замена, как замена √ • на å, способом? Как бы это было введено в запросе, который сейчас извлекает данные:

public Cursor getAlternative1(long categoryid, int questionid) {
                final String MY_QUERY = "SELECT question, image, alternative, questionid, correct FROM tbl_question a INNER JOIN tbl_alternative b ON a._id=b.questionid AND b.categoryid=a.categoryid WHERE a.categoryid=? AND a._id=?";

                Cursor cursor = mDb.rawQuery(MY_QUERY, new String[]{String.valueOf(categoryid), String.valueOf(questionid)});
                if (cursor != null) {
                      cursor.moveToFirst();
                 }
                return cursor;
            }

Спасибо за любую помощь!

2 ответа

Решение

Похоже, что ваши строковые данные были изначально закодированы в UTF-8, но их неправильно интерпретируют как MacRoman.

Первое, что нужно сделать, это убедиться, что ваши данные правильно хранятся в базе данных. Ты можешь использовать SELECT HEX(SomeColumn) чтобы увидеть необработанные байты, которые хранятся для строки. Кодировка по умолчанию в SQLite - UTF-8, поэтому правильно закодированная строка будет иметь C3A5 за å, C3A4 за ä, а также C3B6 за ö, Если ты видишь E2889AE280A2, E2889AC2A7, E2889AE28882затем неверная интерпретация символов (å→√•, ä→√§, ö→√δ) происходит до того, как данные попадают в БД. Если вы просто видите 8C, 8A, а также 9A, тогда делается обратное неверное толкование.

Если ваша база данных верна, то это, вероятно, подпрограмма ввода / вывода, которая считает кодировку системы UTF-8, когда это действительно MacRoman. Попробуйте что-то вроде System.setProperty("file.encoding", "macintosh");,

Это небольшой старый пост, но если вы импортируете данные в sqlite с помощью оболочки Windows cmd, попробуйте сделать это в оболочке:

c:> chcp 65001

Это изменит кодовую страницу оболочки cmd на utf 8

c:> sqlite3 database.db

где insertts.sql - это последовательность вставок в UTF-8 (БЕЗ ХАРАКТЕРА БОМ!!). Вы можете создать такой файл с помощью Notepad++

Надеюсь, поможет

Другие вопросы по тегам