Unicode 到 ASCII 的转换/映射

net*_*rog 5 c# encoding ascii

我需要某种转换/映射,例如由 CLCL 剪贴板管理器完成。

\n\n

它的作用是这样的:

\n\n

我复制以下 Unicode 文本: \xc5\xab\xc4\xab
\n并且 CLCL 将其转换为: ui

\n\n

有什么技术可以进行这样的转换吗?或者也许有映射表可用于转换,比方说,符号 \xc5\xab 映射到 u。

\n\n

更新

\n\n

感谢大家的帮助。这是我带来的(两种解决方案的混合),一种由 Erik Schierboom 发布,另一种取自http://blogs.infosupport.com/normalizing-unicode-strings-in-c/#comment-8984

\n\n
public static string ConvertUnicodeToAscii(string unicodeStr, bool skipNonConvertibleChars = false)\n{\n    if (string.IsNullOrWhiteSpace(unicodeStr))\n    {\n        return unicodeStr;\n    }\n\n    var normalizedStr = unicodeStr.Normalize(NormalizationForm.FormD);\n\n    if (skipNonConvertibleChars)\n    {\n        return new string(normalizedStr.ToCharArray().Where(c => (int) c <= 127).ToArray());\n    }\n\n    return new string(\n        normalizedStr.Where(\n            c =>\n                {\n                    UnicodeCategory category = CharUnicodeInfo.GetUnicodeCategory(c);\n                    return category != UnicodeCategory.NonSpacingMark;\n                }).ToArray());\n}\n
Run Code Online (Sandbox Code Playgroud)\n

Eri*_*oom 3

我已经使用以下代码一段时间了:

private static string NormalizeDiacriticalCharacters(string value)
{
    if (value == null)
    {
        throw new ArgumentNullException("value");
    }

    var normalised = value.Normalize(NormalizationForm.FormD).ToCharArray();

    return new string(normalised.Where(c => (int)c <= 127).ToArray());
}
Run Code Online (Sandbox Code Playgroud)