«Мы не знаем почему, но в браузере эти символы разбиты»
Ну, это первое, что нужно выяснить.Вы должны отслеживать свои данные на каждом этапе:
- Когда вы извлекаете их из базы данных (с ведением журнала)
- Когда вы вводите их на страницу (с ведением журнала)
- На проводе (через Wireshark )
Когда вы регистрируетесь, не просто записывайте в журнал строки: регистрируйте символы Unicode, которые составляют строки, как целые числа.Просто приведите каждый символ в строке к целому числу и зарегистрируйте его.Это примитивно, но оно скажет вам, что вам нужно знать.
Когда вы посмотрите на провод, конечно, вы увидите байт , а не символы как таковые.Вы должны выяснить, какие байты вы ожидаете для выбранной вами кодировки, и сравнить их с тем, что действительно происходит в сети.
Вы указали кодировку в HTML - но сказали ли вы, что генерирует вашу страницу, что выхотите это в ISO Latin 1?Вероятно, это будет причиной как установки заголовка типа содержимого , так и , выполняющего фактическое преобразование текста в байты.
Кроме того, есть ли причина, по которой вы используете вместо этого ISO Latin 1из UTF-8?Почему вы сознательно ограничиваете себя таким образом?(Латинская ISO 1 может обрабатывать только первые 256 символов Unicode вместо полного диапазона символов Unicode. UTF-8 может обрабатывать все, и столь же эффективен для ASCII.)