【问题标题】:How to convert from unicode to ASCII如何从 unicode 转换为 ASCII
【发布时间】:2010-03-17 06:12:52
【问题描述】:

有没有办法将 unicode 值转换为 ASCII?

【问题讨论】:

    标签: c#-3.0


    【解决方案1】:

    要简单地从 unicode 字符中去除重音符号,您可以使用以下内容:

    string.Concat(input.Normalize(NormalizationForm.FormD).Where(
      c => CharUnicodeInfo.GetUnicodeCategory(c) != UnicodeCategory.NonSpacingMark));
    

    【讨论】:

    • 这正是我所需要的。不是转换,而是字符的规范化!
    【解决方案2】:

    您无法从 Unicode 转换为 ASCII。几乎 Unicode 中的每个字符都不能用 ASCII 表示,而那些 可以 表示的字符在 ASCII 中的代码点与 UTF-8 中的代码点完全相同,这可能就是你所拥有的。几乎您唯一能做的甚至接近正确的事情就是丢弃代码点 128 以上的所有字符,即使这样也很可能与您的要求相去甚远。 (另一种可能性是简化重音或变音字母以使超过 128 个字符“几乎”可表达,但这甚至还没有开始真正涵盖 Unicode。)

    【讨论】:

      【解决方案3】:

      从技术上讲,是的,您可以使用 Encoding.ASCII

      示例(从 byte[] 到 ASCII):

      // Convert Unicode to Bytes
      
      byte[] uni = Encoding.Unicode.GetBytes("Whatever unicode string you have");
      
      // Convert to ASCII
      
      string Ascii = Encoding.ASCII.GetString(uni);
      

      只要记住 Unicode 是一个比 Ascii 大得多的标准,就会有一些字符根本无法正确编码。 Have a look here 用于表格和有关这两种编码的更多信息。

      【讨论】:

      • 这行不通。这会将字符串编码为 UTF-16 字节,然后将这些字节曲解,就好像它们是 ASCII 一样(当然它们不是)。这些方法不会在字符值之间进行转换。结果:"W␀h␀a␀t␀e␀v␀e␀r␀ ␀u␀n␀i␀c␀o␀d␀e␀ ␀s␀t␀r␀i␀n␀g␀ ␀y␀o␀u␀ ␀h␀a␀v␀e␀"(使用 ␀ control picture 表示 ASCII NUL)。
      • @Kyle_Rozendo 是的,我做到了。您仍然不能只取一个编码的字节并将它们作为另一种编码读取!这就是“W”→“W␀”的原因。如果它对 W 不起作用,则不是字符支持问题(ASCII 有 W)。换个方向试试这个方法(ASCII → UTF-16),你就会明白我的意思了。
      • 我认为您可以将 Unicode 转换为 ASCII。它不会产生非常可读的输出,这是 ASCII 的产物,它从根本上无法在字符到字符的级别上表示 unicode。这个答案确实以某种方式将 Unicode 转换为 ASCII,这正是 OP 所要求的。 (11 年后我知道了)
      【解决方案4】:

      此解决方法可能更适合您的需求。它从字符串中去除 unicode 字符,只保留 ASCII 字符。

      byte[] bytes = Encoding.ASCII.GetBytes("eéêëèiïaâäàåcç  test");
      char[] chars = Encoding.ASCII.GetChars(bytes);
      string line = new String(chars);
      line = line.Replace("?", "");
      //Results in "eiac test"
      

      请注意,字符输入字符串中的第二个“空格”是 ASCII 值为 255 的字符

      【讨论】:

        【解决方案5】:

        好吧,既然有大约 100,000 多个 unicode 字符而只有 128 个 ASCII 字符,那么 1-1 映射显然是不可能的。

        不过,您可以使用 Encoding.ASCII 对象从 Unicode 字符串中获取 ASCII 字节值。

        【讨论】:

          【解决方案6】:

          如果您的元数据字段只接受 ASCII 输入。 Unicode 字符可以通过 MathJax 转换为它们的 TEX 等效字符。什么是 MathJax? MathJax 是一个 JavaScript 显示引擎,用于在浏览器中呈现 TEX 或 MathML 编码的数学,而无需安装字体或浏览器插件。任何启用了 JavaScript 的现代浏览器都将支持 MathJax。有关 MathJax 的一般信息,请访问 mathjax.org。

          【讨论】:

            【解决方案7】:

            这取决于您所说的“转换”。

            您可以使用AnyAscii 包进行音译。

            // C#
            using AnyAscii;
            
            string s = "άνθρωποι".Transliterate();
            // anthropoi
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2021-08-30
              • 2015-05-08
              • 2012-10-06
              • 2013-05-17
              • 2011-12-10
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多