Unicode到ASCII转换/映射

时间:2013-03-28 13:54:34

标签: c# encoding ascii

我需要某种转换/映射,例如,由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());
}

2 个答案:

答案 0 :(得分: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());
}

答案 1 :(得分:-1)

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

话虽这么说,可以将Unicode的ASCII子集中的字符转换为Unicode。

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

 string myString = "SomeString";
 byte[] asciiString = System.Text.Encoding.ASCII.GetBytes(myString);