将特殊字符转换为正常字符
本文关键字:字符 常字符 特殊字符 转换 | 更新日期: 2023-09-27 18:20:21
我需要一种方法来转换像这样的特殊字符:
Helloæ
到正常字符。所以这个词最终会变成Helloae
。到目前为止,我已经尝试了HttpUtility.Decode
,或者一种将UTF8转换为win1252的方法,但没有成功。有什么简单通用的东西可以做这项工作吗?
谢谢。
编辑
我试过用OC上的帖子来实现这两种方法。方法如下:
public static string ConvertUTF8ToWin1252(string _source)
{
Encoding utf8 = new UTF8Encoding();
Encoding win1252 = Encoding.GetEncoding(1252);
byte[] input = _source.ToUTF8ByteArray();
byte[] output = Encoding.Convert(utf8, win1252, input);
return win1252.GetString(output);
}
// It should be noted that this method is expecting UTF-8 input only,
// so you probably should give it a more fitting name.
private static byte[] ToUTF8ByteArray(this string _str)
{
Encoding encoding = new UTF8Encoding();
return encoding.GetBytes(_str);
}
但这并没有奏效。字符串保持不变。
请参阅:是否存在.NET音译库?
UnidecodeSharpFork
用法:
var result = "Helloæ".Unidecode();
Console.WriteLine(result) // Prints Helloae
æ
和ae
之间没有直接映射,它们是完全不同的unicode代码点。如果你需要这样做,你很可能需要编写一个函数,将有问题的代码点映射到你想要的字符串。
根据评论,您可能需要采取两个阶段的方法:
- 删除变音符号,并根据可能重复的链接组合字符
- 将未组合的所有剩余字符映射到备用字符串
switch(badChar){
case 'æ':
return "ae";
case 'ø':
return "oe";
// and so on
}