[英]Unicode to ASCII conversion/mapping
我需要某種轉換/映射,例如,由CLCL剪貼板管理器完成。
它的作用是這樣的:
我復制以下Unicode文本:ūī
CLCL將其轉換為:ui
有沒有技術可以進行這樣的轉換? 或者也許有可用於轉換的映射表,比方說,符號ū映射到u。
UPDATE
感謝大家的幫助。 以下是我的參考資料(兩種解決方案的混合體),一份由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());
}
通常,無法將Unicode轉換為ASCII,因為ASCII是Unicode的子集。
話雖這么說,可以將Unicode的ASCII子集中的字符轉換為Unicode。
在C#中,通常不需要進行轉換,因為默認情況下所有字符串都是Unicode,並且所有組件都支持Unicode,但如果必須進行轉換,請使用以下命令:
string myString = "SomeString";
byte[] asciiString = System.Text.Encoding.ASCII.GetBytes(myString);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.