我需要某种转换/映射,例如由 CLCL 剪贴板管理器完成。
\n\n它的作用是这样的:
\n\n我复制以下 Unicode 文本: \xc5\xab\xc4\xab
\n并且 CLCL 将其转换为: ui
有什么技术可以进行这样的转换吗?或者也许有映射表可用于转换,比方说,符号 \xc5\xab 映射到 u。
\n\n更新
\n\n感谢大家的帮助。这是我带来的(两种解决方案的混合),一种由 Erik Schierboom 发布,另一种取自http://blogs.infosupport.com/normalizing-unicode-strings-in-c/#comment-8984
\n\npublic static string ConvertUnicodeToAscii(string unicodeStr, bool skipNonConvertibleChars = false)\n{\n if (string.IsNullOrWhiteSpace(unicodeStr))\n {\n return unicodeStr;\n }\n\n var normalizedStr = unicodeStr.Normalize(NormalizationForm.FormD);\n\n if (skipNonConvertibleChars)\n {\n return new string(normalizedStr.ToCharArray().Where(c => (int) c <= 127).ToArray());\n }\n\n return new string(\n normalizedStr.Where(\n c =>\n {\n UnicodeCategory category = CharUnicodeInfo.GetUnicodeCategory(c);\n return category != UnicodeCategory.NonSpacingMark;\n }).ToArray());\n}\nRun Code Online (Sandbox Code Playgroud)\n
我已经使用以下代码一段时间了:
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());
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4762 次 |
| 最近记录: |