французские буквы в представлениях андроида показывают вопросительные знаки - PullRequest
2 голосов
/ 03 июня 2011

Я читаю данные из базы данных utf8, затем отображаю их в виде списка.но в базе данных есть слова, содержащие буквы é é à á á, когда я вручную получаю xml в браузере, он показывает идеальный

, но в просмотре списка он показывает вместо вопроса

как мнеустановить набор символов utf8 для моего списка?или есть другой путь?

Ответы [ 7 ]

3 голосов
/ 03 июня 2011

Это действительно странно, поскольку Android работает с UTF-8 ... В моем случае я использую ресурсы в кодировке UTF-8 (итальянский, немецкий, русский, китайский), файлы и так далее - и все работает.

Есть 3 варианта, почему символы с французским акцентом отображаются как "?" метки:

  1. Вы во время операции чтения случайно где-то делаете неявный перевод из UTF-8 в другую кодировку / Charset
  2. Данные, хранящиеся в базе данных, на самом деле не находятся в UTF-8. Иногда вам нужно использовать правильное ключевое слово SQLite pragma
  3. Ваша система не имеет правильного шрифта, который содержит акцентированные символы
1 голос
/ 26 апреля 2013

У меня была такая же проблема. Убедитесь, что вы не используете StringBufferInputStream (что устарело). Этот метод вызывает эту проблему.

1 голос
/ 03 июня 2011

Вы должны дважды проверить кодировку файлов на вашем компьютере.Ваша система использует латиницу-1 (iso-8859-1) или utf-8?

Ударения могут хорошо выглядеть в кодированном латинице-1 файле, объявляющем xmlns в utf-8, но на самом деле они не хранятся в utf-8.

0 голосов
/ 26 декабря 2018

Поскольку я разрабатываю приложение, в котором используются слова на иностранных языках (включая французский), я поделюсь тем, что сработало для меня.В моем приложении каждый персонаж с особым акцентом показывал черный бриллиант с белым знаком вопроса.У меня есть копия базы данных на ноутбуке, и я использую в основном Excel для загрузки в нее данных (я создаю файлы CSV, которые затем импортирую через DB Browser for SQLite).В моих файлах CSV я мог видеть все акценты правильно, но после того, как я импортировал их в базу данных, везде были черные бриллианты.Я пробовал кодирование, декодирование, использование Html.fromHtml и т. Д. Единственное, что мне помогло, - это вручную скопировать слово со специальным символом и вставить его в базу данных (с использованием программы).Это работало без проблем, и теперь моя база данных не содержит черных бриллиантов.Единственная проблема - поскольку это ручная работа, она требует времени, много времени.

0 голосов
/ 17 октября 2016

Пусть response будет объектом, возвращаемым с вашего сервера.Сделай фоллинг:

response = Utilities.encodedToUTF8(response);

public static String encodedToUTF8(String response) {
    try {
        response = new String(response.getBytes("ISO-8859-1"), "UTF-8");
    } catch (UnsupportedEncodingException e) {
        Log.e(TAG, "Error: " + e.getMessage());
    }
    return response;
}
0 голосов
/ 08 октября 2013

Использование

Html.fromHtml (строка)

для правильного отображения текста.

0 голосов
/ 03 июня 2011

Однажды у меня была эта проблема.

Вы должны полностью удалить свою базу данных. Я уверен, что теперь вы сделали правильные вещи с вашими данными с помощью iconv и прагмы в sqlite. Так что проблема в том, что ваша база данных в вашем пакете является старой версией. Поэтому очистите проект в Eclipse, полностью удалите приложение с Android, удалив базу данных перед удалением, измените код версии установщика sqlite (DatabaseHelper) и перезапустите.

Надеюсь, это поможет, Stéphane

...