如何将unicode转换为ASCII

Han*_*nny 5 c#-3.0

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

79E*_*796 11

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

string.Concat(input.Normalize(NormalizationForm.FormD).Where(
  c => CharUnicodeInfo.GetUnicodeCategory(c) != UnicodeCategory.NonSpacingMark));
Run Code Online (Sandbox Code Playgroud)

  • 这正是我所需要的。不是转换,而是字符标准化! (2认同)

Kyl*_*ndo 5

从技术上讲,是的,您可以使用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);
Run Code Online (Sandbox Code Playgroud)

只要记住 Unicode 是比 Ascii 大得多的标准,就会有一些字符根本无法正确编码。请查看此处的表格和有关这两种编码的更多信息。

  • @Kyle_Rozendo 是的,我做到了。您仍然不能只获取一种编码的字节并将它们作为另一种编码读取!这就是“W”→“W␀”的原因。如果它对 W 不起作用,则不是字符支持的问题(ASCII 有 W)。从另一个方向(ASCII → UTF-16)尝试这种方法,您就会明白我的意思。 (7认同)
  • 这是行不通的。这会将字符串编码为 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␀"`(使用 ␀ [控制图片](http://en.wikipedia.org/wiki/Control_Pictures) 表示 [ASCII NUL](http:// en.wikipedia.org/wiki/Null_character))。 (5认同)

geo*_*osd 5

这取决于你所说的“转换”是什么意思。

\n

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

\n
// C#\nusing AnyAscii;\n\nstring s = "\xce\xac\xce\xbd\xce\xb8\xcf\x81\xcf\x89\xcf\x80\xce\xbf\xce\xb9".Transliterate();\n// anthropoi\n
Run Code Online (Sandbox Code Playgroud)\n


Dea*_*ing 2

嗯,鉴于 unicode 字符有 100,000 多个,而 ASCII 字符只有 128 个,1-1 映射显然是不可能的。

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