4

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

它的作用是这样的:

我复制以下 Unicode 文本:ūī
并且 CLCL 将其转换为:ui

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

更新

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

public static string ConvertUnicodeToAscii(string unicodeStr, bool skipNonConvertibleChars = false)
{
    if (string.IsNullOrWhiteSpace(unicodeStr))
    {
        return unicodeStr;
    }

    var normalizedStr = unicodeStr.Normalize(NormalizationForm.FormD);

    if (skipNonConvertibleChars)
    {
        return new string(normalizedStr.ToCharArray().Where(c => (int) c <= 127).ToArray());
    }

    return new string(
        normalizedStr.Where(
            c =>
                {
                    UnicodeCategory category = CharUnicodeInfo.GetUnicodeCategory(c);
                    return category != UnicodeCategory.NonSpacingMark;
                }).ToArray());
}
4

2 回答 2

2

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

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());
}
于 2013-03-28T13:59:05.183 回答
-1

通常,无法将 Unicode 转换为 ASCII,因为 ASCII 是 Unicode 的子集。

也就是说,可以将 Unicode 的 ASCII 子集中的字符转换为 Unicode。

在 C# 中,通常不需要进行转换,因为默认情况下所有字符串都是 Unicode,并且所有组件都支持 Unicode,但如果必须进行转换,请使用以下命令:

 string myString = "SomeString";
 byte[] asciiString = System.Text.Encoding.ASCII.GetBytes(myString);
于 2013-03-28T13:57:50.740 回答