【发布时间】:2010-03-17 06:12:52
【问题描述】:
有没有办法将 unicode 值转换为 ASCII?
【问题讨论】:
标签: c#-3.0
有没有办法将 unicode 值转换为 ASCII?
【问题讨论】:
标签: c#-3.0
要简单地从 unicode 字符中去除重音符号,您可以使用以下内容:
string.Concat(input.Normalize(NormalizationForm.FormD).Where(
c => CharUnicodeInfo.GetUnicodeCategory(c) != UnicodeCategory.NonSpacingMark));
【讨论】:
您无法从 Unicode 转换为 ASCII。几乎 Unicode 中的每个字符都不能用 ASCII 表示,而那些 可以 表示的字符在 ASCII 中的代码点与 UTF-8 中的代码点完全相同,这可能就是你所拥有的。几乎您唯一能做的甚至接近正确的事情就是丢弃代码点 128 以上的所有字符,即使这样也很可能与您的要求相去甚远。 (另一种可能性是简化重音或变音字母以使超过 128 个字符“几乎”可表达,但这甚至还没有开始真正涵盖 Unicode。)
【讨论】:
从技术上讲,是的,您可以使用 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 用于表格和有关这两种编码的更多信息。
【讨论】:
"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)。
此解决方法可能更适合您的需求。它从字符串中去除 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 的字符
【讨论】:
好吧,既然有大约 100,000 多个 unicode 字符而只有 128 个 ASCII 字符,那么 1-1 映射显然是不可能的。
不过,您可以使用 Encoding.ASCII 对象从 Unicode 字符串中获取 ASCII 字节值。
【讨论】:
如果您的元数据字段只接受 ASCII 输入。 Unicode 字符可以通过 MathJax 转换为它们的 TEX 等效字符。什么是 MathJax? MathJax 是一个 JavaScript 显示引擎,用于在浏览器中呈现 TEX 或 MathML 编码的数学,而无需安装字体或浏览器插件。任何启用了 JavaScript 的现代浏览器都将支持 MathJax。有关 MathJax 的一般信息,请访问 mathjax.org。
【讨论】:
这取决于您所说的“转换”。
您可以使用AnyAscii 包进行音译。
// C#
using AnyAscii;
string s = "άνθρωποι".Transliterate();
// anthropoi
【讨论】: