Могу ли я восстановить международные символы, ошибочно хранящиеся в поле varchar? - PullRequest
5 голосов
/ 28 октября 2008

Мой клиент имеет старую базу данных MS SQL 2000, в которой для хранения имен используются поля varchar (50). Он пытался использовать эту базу данных для сбора некоторых данных (через веб-форму). Некоторые из заполнителей форм были из других стран, и поля варшаров стали сумасшедшими, когда некоторые из этих людей ввели свои имена. Можно ли как-то восстановить данные? Может быть, угадав, какой персонаж должен быть основан на том, что он разрешил в ASCII / varchar и стране, из которой этот человек? Некоторые данные:

Имя / Страна / Имя или Фамилия?
JiÅ ™ M / CZE / F
Торбьерн / FIN / F
Huszár / HUN / L
Юрген / DEU / F
Мюллер / CHE / L
Бумбальковский / Чешский / L
Doležal / CZE / L
Loïc / DEU / L

Кстати, в веб-форме указан этот тип контента:

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

Ответы [ 4 ]

6 голосов
/ 28 октября 2008

Работа с 5-го примера.

М ация # 195 (С3). As является ASCII # 188 (до н.э.).

Я предполагаю, что Мюллер должен быть Мюллером.

Если это UTF-8, основанный на http://en.wikipedia.org/wiki/UTF-8#Description

У нас есть C3 BC = 1100 0011 1011 1100

Применение сопоставления UTF-8:

(110) 00011 (10) 11 1100

0000 0000 1111 1100

00FC, который является Unicode ü

U + 00FC (см. http://en.wikipedia.org/wiki/Latin_characters_in_Unicode)

Мне кажется, что вы можете работать через это программно.

Теперь решаем первый пример:

Jiå ™ ã был фактически JiÅ ™ Ã (последний символ не показан).

Игнорирование Цзи, что правильно,

C5 99 C3 AD

(110) 0 0101 (10) 01 1001 (110) 0 0011 (10) 10 1101

0159 00ED

1037 * Р.И. *

Так зовут: Йиржи. Википедия говорит, что специальный г - это чешский язык, и я тоже. Кроме того, если я гуглю Йиржи (http://www.google.com/search?q=Ji%C5%99%C3%AD&ie=utf-8&oe=utf-8), я получаю много хитов. Мы здесь победитель.

Второй пример, Торбьёрн, красиво отображается на Торбьерне, что звучит убедительно.

ИМХО, нет особой необходимости проверять их, кажется, они просто работают.

1 голос
/ 28 октября 2008

Российская почта это сделала. Кто-нибудь сохранил изображение до его исчезновения?

http://forums.thedailywtf.com/forums/p/7156/133456.aspx

0 голосов
/ 28 октября 2008

В дополнение к комментариям Ричарда: если веб-страница, содержащая форму, задает набор символов (например, iso-8859-1 == unicode) и кодировку (например, utf-8), то совместимый со стандартами браузер должен отправлять данные формы с использованием этого набор символов и кодировка. Если на ваших веб-страницах указан юникод, вам не нужно справляться со случайными кодовыми страницами Microsoft в данных - все они должны быть в кодировке Юникод.

0 голосов
/ 28 октября 2008

Вам в основном нужно протолкнуть его через libiconv, преобразовав его в UTF8.

Полный список соответствующих наборов символов будет зависеть от вашего приложения, но вы можете сделать некоторые предположения на основе кода страны. Начните с этой страницы в WikiPedia .

Предупреждение: Вам понадобится человек для проверки каждого преобразования.

...