Unicode到ASCII的转换/映射

本文关键字:映射 转换 ASCII Unicode | 更新日期: 2023-09-27 18:06:13

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

Unicode到ASCII的转换/映射

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

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());
}

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

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

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

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