c#: как преобразовать символ Unicode в его эквивалент ASCII

Я знаю, что это повторяющийся вопрос здесь, но ни один из ответов не работает для меня.

Из системы я получаю текст Unicode. Просто электронная почта + имя от клиентов.

Когда я записываю эти строки в свою базу данных SQL, появляются некоторые символы с \u.

Например письма попадают в БД: [email protected]

Как я преобразовываю строку Unicode в моей программе на С# в ascii, чтобы БД получала [email protected].

Также замените специальные символы на эквивалентные или ни на кого... Например, "Hernán π" на "Hernan"

Спасибо!


person Gabrielizalo    schedule 28.02.2011    source источник


Ответы (2)


ИМХО, преобразование Unicode обратно в ASCII для некоторого сомнительного хранения или технической выгоды не является хорошей идеей в 21 веке, особенно с учетом того, что электронная почта изменяется для поддержки Unicode в заголовках и телах.

http://en.wikipedia.org/wiki/Unicode_and_e-mail

Если причина, по которой вы хотите преобразовать Hernán в Hernan, связана с поиском, вам следует рассмотреть возможность использования нечувствительного к акценту (AI) сопоставления в вашей базе данных или заставить его сделать это — см. это SO post.

Одна вещь, которую вам, возможно, потребуется перепроверить, заключается в том, что ваши строки не предварительно кодируются перед сохранением в вашей базе данных (при условии, что ваш столбец БД настроен на прием юникода, т.е. NVARCHAR и т. д.), символ '@' должен храниться как ' @' (0040 в UTF 16), а не как '@'.

РЕДАКТИРОВАТЬ: кодировка «\ uNNNN» в строке может происходить из Java или Python. Возможно, вы сможете отследить данные строки электронной почты по своей архитектуре, чтобы найти источник этой кодировки и изменить ее на что-то более простое для декодирования в C#, например UTF-8.

Как сделать Я рассматриваю строку ASCII как Unicode и не экранирую в ней экранированные символы в python?

person StuartLC    schedule 28.02.2011
comment
Спасибо, Nonnb... Хорошо.. Если мы можем хранить данные в Unicode, нет проблем... Наши столбцы - nvarchar... А в c# я ничего не делаю, кроме создания строковых переменных. Я думаю, что \u исходит из исходных данных. Итак, как я могу преобразовать его? Спасибо еще раз! - person Gabrielizalo; 28.02.2011

Вы можете использовать Encoding.Convert для таких операций. Прочтите об этом в MSDN.

person Kyrylo M    schedule 28.02.2011