我需要某种转换/映射,例如,由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());
}
我使用了以下代码一段时间:
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);