【问题标题】:c#: How to convert a Unicode character to its ASCII equivalentc#:如何将 Unicode 字符转换为其 ASCII 等效字符
【发布时间】:2011-07-05 16:07:39
【问题描述】:

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

我正在从系统接收 Unicode 文本。只是来自客户的电子邮件 + 姓名。

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

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

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

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

谢谢!

【问题讨论】:

    标签: c# unicode ascii


    【解决方案1】:

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

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

    如果您想将 Hernán 转换为 Hernan 的原因是为了搜索,您应该考虑在您的数据库上使用不区分重音 (AI) 排序规则,或者强制它这样做 - 请参阅 SO post

    您可能需要仔细检查的一件事是,您的字符串在存储到数据库之前没有被预编码(假设您的 DB 列设置为接受 unicode - 即 NVARCHAR 等),字符“@”应该是存储为“@”(UTF 16 中的 0040)而不是“\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?

    【讨论】:

    • 谢谢 Nonnb... 好的.. 如果我们可以将数据存储在 Unicode 中没有问题... 我们的列是 nvarchar... 而在 c# 中我除了创建字符串变量之外什么都不做。我认为 \u 来自原始数据。那么我该如何转换呢?再次感谢!
    【解决方案2】:

    您可以使用Encoding.Convert 进行此类操作。在MSDN阅读有关此内容的信息

    【讨论】:

      猜你喜欢
      • 2010-09-13
      • 2013-01-26
      • 2018-11-19
      • 2018-11-18
      • 1970-01-01
      • 2018-03-21
      • 2012-07-19
      • 2015-03-29
      • 1970-01-01
      相关资源
      最近更新 更多