Сказать браузеру, что страница имеет формат UTF-8, - это хорошо, но бесполезно, если только вы не уверены, что пишете только UTF-8 на странице.
Чтобы убедиться, что это происходит:
- Всякий раз, когда вы читаете из твиттера или чего-либо еще, всегда требуйте данные UTF-8, убедитесь, что вы получаете байты UTF-8.
- Когда вы создаете строку из необработанных байтов, Javaпо умолчанию используется «кодировка платформы по умолчанию», которая может быть любой.Преобразование байтов в строки происходит при создании новой строки из байтового массива или при использовании Reader.Оба эти метода позволяют вам явно определить, какую оболочку вы ожидаете.После проверки точки 1 и получения байтов UTF-8 убедитесь, что везде в приложении вы указываете использовать UTF-8 при преобразовании байтов в строки.
- при использовании Writer для преобразования строк в байтыНапример, при отправке в браузер (создатель сервлета) применяются те же правила: старайтесь быть явными и всегда указывайте UTF-8
- Если вы храните вещи в базах данных, у вас есть две проблемы с кодированием.Первый - это то, какая кодировка базы данных используется при разговоре с вашим приложением (кодировка соединения), вторая - какая кодировка базы данных фактически хранит строки (кодировка хранилища).Обычно вы можете указать только кодировку соединения из Java, в то время как кодировка хранилища указывается в базе данных при ее создании (поиск «сопоставление», если вы используете mysql).
Определение, где находитсяСтрока, которая должна быть UTF-8, плохо перекодируется, это трудная задача.В 99% случаев он конвертируется в какую-либо ISO-латиницу или аналогичную кодировку, что приводит к тому, что специальные символы, такие как à или ì, отображаются в виде двух символов мусора.Часто отладка - единственный способ выяснить, где это происходит.