C# 将特殊字符转换为普通字符
我需要一种转换特殊字符的方法,如下所示:C# 将特殊字符转换为普通字符,c#,asp.net-mvc,character-encoding,special-characters,C#,Asp.net Mvc,Character Encoding,Special Characters,我需要一种转换特殊字符的方法,如下所示: Helloæ 到普通字符。所以这个词最终会变成Helloae。到目前为止,我已经尝试了HttpUtility.Decode,或者一种将UTF8转换为win1252的方法,但是没有任何效果。有什么简单通用的方法可以完成这项工作吗 多谢各位 编辑 我尝试过使用OC上的帖子实现这两种方法。方法如下: public static string ConvertUTF8ToWin1252(string _source) { Encoding utf8 = n
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);
}
但它没有起作用。字符串保持不变。在
æ
和ae
之间没有直接映射,它们是完全不同的unicode代码点。如果需要这样做,您很可能需要编写一个函数,将有问题的代码点映射到所需的字符串
根据评论,您可能需要采取两个阶段的方法:
var result = "Helloæ".Unidecode();
Console.WriteLine(result) // Prints Helloae
可能的复制可能只是通过带有开关的函数自己实现inside@James该解决方案不适用于字符串
Helloæ
。是的,我在问题中尝试了两种类似的方法,但它不起作用。仍在寻找一种方法,如果您碰巧知道,请随时提供。您的评论“应该注意,此方法仅期望UTF-8输入”不适用,因为您的函数不接受字节数组,而是字符串对象作为输入。字符串对象独立于任何编码。一旦你将一个UTF8字节数组转换成一个字符串,它将和任何其他字符串一样。是的,这将是一个解决方案。我必须承认我不知道怎么做。我会更新我的帖子来展示我到目前为止所做的事情(这不起作用)。æ
是由字母ae
@James构成的。实际上不是,请查阅相关的Unicode,这是一个独特的字符U+00E6,因此没有组合字符。我不知道如何执行第二步。你能给我引路吗?好的,我想我明白你的意思了,大部分评论都指向这个解决方案。我想我会实现类似的东西。如果行得通,我会把你接回来。在我去查夏普福克的路上。这将是一个很好的工具。它是一个基于Perl和Python中其他表的编译的音译表。这似乎是更好的解决方案,因为它消除了选择要音译的字符的负担。我不确定这方面的许可证,所以,在使用之前,您可能想查看一下。是的:)正是我想要的。非常感谢。
var result = "Helloæ".Unidecode();
Console.WriteLine(result) // Prints Helloae