Проблемы с кодированием в ASP при использовании английских и китайских символов - PullRequest
3 голосов
/ 06 июня 2011

У меня проблемы с кодировкой китайского на сайте ASP.Форматы файлов:

  • translations.txt - UTF-8 (для хранения моих переводов)
  • test.asp - UTF-8 - (для отображения страницы)

test.asp читает файл translations.txt, который содержит следующие данные:

Help|ZH|帮助 
Home|ZH|首页

test.asp разделяется на разделитель канала и, если пользователь содержит файл cookie с ZH, он будетотобразить этот перевод, иначе он просто вернется к значению ключа.

Теперь я попробовал следующие вещи, которые не работали:

  1. Добавить метатег

    <meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>

  2. Установить Response.CharSet = "UTF-8"

  3. Установить Response.ContentType = "text/html"
  4. Установить сеанс.CodePage (и Response) для 65001 (UTF-8)
  5. Я подтвердил, что текст в translations.txt определенно находится в UTF-8 и имеет без метки порядка байтов
  6. Браузер обнаруживает, что страница имеет кодировку Unicode UTF-8, но страница отображает gobbledegook.
  7. Метод Scripting.OpenTextFile(<file>,<create>,<iomode>,<encoding>) возвращает один и тот же неверный текст независимо от того,параметра кодирования.

Вот пример того, что я хочу показать в Китае (ZH):

  • 首页
  • 帮助

Но отображается следующее:

  • é¦ – 页
  • å¸®åŠ ©

Это происходит во всех протестированных браузерах - GoogleChrome, IE 7/8 и Firefox 4. У шрифта определенно есть китайская ветвь глифов.Кроме того, у меня установлены восточные языки.

-

Я попытался вставить исходное значение в HTML, что сработало (но обратите внимание, что это жестко закодированное значение).

  • 首页
  • é¦ – 页

Однако это странно.

首页 - (в шестнадцатеричном виде) --> E9 A6 96 E9 A1 - (в виде символов) -> é¦ – 页

Есть идеи, что мне не хватает?

Ответы [ 4 ]

2 голосов
/ 07 июня 2011

Чтобы прочитать файл UTF-8, вам, вероятно, потребуется использовать объект ADODB.Stream. Я не претендую на звание эксперта по кодированию символов, но этот тест сработал для меня:

test.txt (сохранен как UTF-8 без спецификации):

首页
帮助

test.vbs

Option Explicit

Const adTypeText = 2
Const adReadLine = -2

Dim stream : Set stream = CreateObject("ADODB.Stream")
stream.Open
stream.Type = adTypeText
stream.Charset = "UTF-8"
stream.LoadFromFile "test.txt"

Do Until stream.EOS
    WScript.Echo stream.ReadText(adReadLine)
Loop

stream.Close
0 голосов
/ 03 августа 2011

Просто используйте скрипт внизу вверху вашей страницы

Response.CodePage=65001
Response.CharSet="UTF-8"
0 голосов
/ 07 июня 2011

Scripting.OpenTextFile вообще не понимает UTF-8.Он может только читать текущую OEM кодировку или Unicode.Как вы можете видеть из количества байтов, используемых для некоторых наборов символов, UTF-8 довольно неэффективен.Я бы рекомендовал Unicode для такого рода данных.

Вы должны сохранить файл как Unicode (на языке Windows), а затем открыть с помощью:

Dim stream : Set stream = Scripting.OpenTextFile(yourFilePath, 1, false, -1)
0 голосов
/ 06 июня 2011

Независимо от того, какая часть процесса читает файл translations.txt, похоже, не понимает, что файл находится в UTF-8.Похоже, что он читает его как какую-то другую кодировку.Вы должны указать кодировку в любом процессе, который открывает и читает этот файл.Это будет отличаться от кодировки вашей веб-страницы.

Вставка метки порядка байтов в начале этого файла также может быть решением.

...