строка неправильно переведена ado - PullRequest
1 голос
/ 05 февраля 2010

У меня есть база данных с сопоставлением SQL_Latin1_General_CP1_CI_AS. В этой базе данных у меня есть поле varchar. В этой базе данных есть строка со строкой «ó» (один символ 243 в кодовой странице 1252). У меня есть простая страница ASP, которая устанавливает кодовую страницу 65001, читает эту строку (используя adodb) и отправляет ее в браузер. Все работает нормально, если «текущий язык для не-Unicode программ» установлен на английский. Если я изменю это на русский и перейду на страницу, я вижу «о». Я могу установить точку останова на странице asp на стороне сервера, и кажется, что ado возвращает «o» вместо «ó».

Почему «текущий язык для программ, не поддерживающих Юникод» имеет значение? База данных содержит данные и настроена для правильной кодовой страницы. Я думал, что внутренне ADO и VBScript хранят все как Unicode. Похоже, что где-то строка преобразуется в кодовую страницу, указанную в «текущем языке для программ, не поддерживающих Юникод», но даже это не имеет особого смысла, как я ожидаю увидеть «?» вместо «о» (но я не совсем понимаю, что обрабатывает преобразование из одной кодовой страницы в другую и какие правила она использует).

Я понимаю, что изменение столбца на nvarchar может помочь, но это не объясняет, почему это происходит.

(редактировать) Я понимаю, почему «ó» превращается в «o». Windows Best Fit http://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WindowsBestFit/bestfit1251.txt

Все еще пытаюсь выяснить, как вывести строку кодовой страницы 1252 из SQL в VBScript без потерь.

...