0

У меня есть документ HTML, хранящийся в файле с кодировкой UTF-8, и я хочу, чтобы мое расширение отображало этот файл в браузере, поэтому я вызываю loadURIWithFlags('file://' + file.path, flags, null, 'UTF-8', null);, но он загружает его как ISO-8859-1 вместо UTF- 8. (Я могу сказать, потому что ISO-8859-1 выбран в меню «Вид»> «Символьное кодирование», а потому, что символы без разбиения пробега отображаются как Â, за которым следует пробел. Если я переключусь на UTF-8 с помощью кодировки символов меню, то все выглядит правильно.)Почему loadURIWithFlags не использует кодировку, которую я передаю ей?

Я попытался включить в флагом и LOAD_FLAGS_CHARSET_CHANGE, но это не оказало никакого эффекта. Я также проверил, что автоматическое обнаружение отключено, так что это тоже не проблема. Добавление <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> к документу, похоже, решило проблему, но я ожидаю, что использование аргумента 'charset' loadURIWithFlags должно работать так же хорошо, поэтому мне интересно, не сделал ли я что-то не так в моей первоначальной попытке.

ответ

1

Вы сделали правильную вещь, и единственное решение - включить в документ информацию о кодировании, потому что, если вы полагаетесь только на заголовки HTTP, вы не сможете загрузить документ, когда документ будет сохранен на диске (поскольку такой вещи нет как заголовки для файлов).

Если вы тот, кто сохранил этот файл, вы можете добавить файл UTF-8 BOM в файл, чтобы убедиться, что он будет правильно загружен Firefox или другими приложениями.

+0

Хорошая идея! Думаю, я не понимал, что существует такая вещь, как спецификация UTF-8 - я думал, что только для кодировок, таких как UTF-16, всегда используются как минимум два байта на символ. Википедия на помощь! (Я добавил ссылку на ваш ответ.) – MatrixFrog

Смежные вопросы