如何解决语言特殊字符标准化为 ansi
我需要管理多种欧洲语言,我不能使用 utf-8,只能使用 ansi。
我问是否有办法找到欧洲语言特殊字符的 ansi 等价物:
以下是等效表的示例:
Italian
à = a'
è = e'
ì = i'
ò = o'
ù = u'
Spanish
á = ‘ + a
é = ‘ + e
í = ‘ + i
ó = ‘ + o
ú = ‘ + u
ñ = ~ + n
ü = ” + u
¡ = Alt (hold down) + !
¿ = Alt (hold down) + ?
German
Ä Uppercase Umlaut (A)
Ö Uppercase Umlaut (O)
Ü Uppercase Umlaut (U)
ß Eszett (ss)
ä Lowercase Umlaut (a)
ö Lowercase Umlaut (o)
ü Lowercase Umlaut (u)
French
À Uppercase Accent Grave (A)
 Uppercase Accent Circonflex (A)
Ä Uppercase Accent Tréma (A)
Æ Uppercase Ligature(AE)
Ç Uppercase Cedilla (C)
È Uppercase Accent Grave (E)
É Uppercase Accent Aigu (E)
Ê Uppercase Accent Circonflex (E)
Ë Uppercase Accent Tréma (E)
Î Uppercase Accent Circonflex (I)
Ï Uppercase Accent Tréma (I)
Ô Uppercase Accent Circonflex (O)
Œ Uppercase Ligature(OE)
Ù Uppercase Accent Grave (U)
Û Uppercase Accent Circonflex (U)
Ü Uppercase Accent Tréma (U)
à Lowercase Accent Grave (a)
â Lowercase Accent Circonflex (a)
ä Lowercase Accent Tréma (a)
æ Lowercase Ligature(ae)
ç Lowercase Cedilla (c)
例如,对于意大利语(我的母语),可以通过这种方式轻松转换重音:
à = a'
è = e'
ì = i'
ò = o'
ù = u'
如何询问是否有一种简单的方法可以为其他语言执行某些操作。
谢谢!
解决方法
我能想到的唯一方法就是做manula mapping。
我会定义某种映射器,基于语言将返回“标准化为 ANSI”字符(因此特定于国家/地区的 UTF8 字符将成为 ANSI 字符)。
这是我正在谈论的草稿:
public static class CountrySpecificMapper
{
private static Dictionary<char,string> _frenchDict = new Dictionary<char,string>()
{
{'À',"A"},{'Â',{'Ä',{'Æ',"AE"},{'Ç',"C"},{'È',"E"},{'É',{'Ê',{'Ë',{'Î',"I"},{'Ï',{'Ô',"O"},{'Œ',"OE"},{'Ù',"U"},{'Û',{'Ü',{'à',"a"},{'â',{'ä',{'æ',"ae"},{'ç',"c"},};
private static Dictionary<char,string> _germanDict = new Dictionary<char,string>()
{
{'Ä',{'Ö',{'ß',"ss"},{'ö',"o"},{'ü',"u"},};
private static Dictionary<CultureInfo,Dictionary<char,string>> _langToDict = new Dictionary<CultureInfo,string>>()
{
{new CultureInfo("fr"),_frenchDict },{new CultureInfo("de"),_germanDict },};
public static string MapCharacter(char @char,CultureInfo cultureInfo)
{
if (cultureInfo is null) throw new ArgumentNullException(nameof(cultureInfo));
var dict = _langToDict[cultureInfo];
if (!dict.ContainsKey(@char))
{
// error or other validation
}
return dict[@char];
}
}
显然,CultureInfo
是引用类型,因此它不是 API 内部实现中使用的字典键的良好候选者(外部代码将为相同的文化创建该类的自己的对象,但引用地址会有所不同..).
仅用于演示目的。
您可以依赖 LCID
的 CultureInfo
属性,或者定义自己的键,更适合您的解决方案。
完成所有工作后,转换变音符号就像
var convertedChar = CountrySpecificMapper.MapCharacter(charToConvert,languageKey);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。