c#:如何将Unicode字符转换为其ASCII等效字符

时间:2011-02-28 10:22:09

标签: c# unicode ascii

我知道这是一个经常出现的问题,但没有一个答案对我不起作用。

从系统我收到Unicode文本。只是来自客户的电子邮件+名称。

当我将这些字符串记录到我的SQL DB时,会出现一些字符,显示为\ u。

例如,电子邮件进入数据库:name \ u0040domain.com

我如何将c#程序中的Unicode字符串转换为ascii,因此数据库获取name@domain.com。

另外将特殊字符替换为等效字符或没有字符...例如“Hernánπ”到“Hernan”

谢谢!

2 个答案:

答案 0 :(得分:2)

在21世纪,恕我直言将Unicode转换回ASCII以获得某些可疑的存储或技术优势并不是一个好主意,特别是因为电子邮件正在被更改以支持标题和正文中的Unicode。

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

如果您想将Hernán转换为Hernan的原因是为了搜索,您应该在数据库中使用Accent Insensitive(AI)排序规则,或者强制它执行此操作 - 请参阅此SO post。< / p>

然而,您可能需要仔细检查的一件事是您的字符串在数据库中存储之前没有得到预编码(假设您的DB列设置为接受unicode - 即NVARCHAR等),字符'@'应该是存储为'@'(0040为UTF 16)而不是'\ u0040'。

编辑: 字符串中的“\ uNNNN”编码可能源自Java或Python。 您可以跟踪架构中的电子邮件字符串数据,以找到此编码的来源,并将其更改为更容易在C#中解码的内容,例如UTF-8。

How do I treat an ASCII string as unicode and unescape the escaped characters in it in python?

答案 1 :(得分:0)

您可以使用Encoding.Convert进行此类操作。请在MSDN

上了解相关信息