将特殊字符转换为正常

时间:2013-06-28 14:24:43

标签: c# asp.net-mvc character-encoding special-characters

我需要一种方法来转换像这样的特殊字符:

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);
}

但它没有奏效。字符串保持不变。

2 个答案:

答案 0 :(得分:12)

请参阅:Does .NET transliteration library exists?

UnidecodeSharpFork

用法:

var result = "Helloæ".Unidecode();
Console.WriteLine(result) // Prints Helloae

答案 1 :(得分:1)

æae之间没有直接映射,它们是完全不同的unicode代码点。如果你需要这样做,你很可能需要编写一个函数,将有问题的代码点映射到你想要的字符串。

根据评论,您可能需要采取两阶段方法:

  1. 删除变音符号并将链接中的字符组合为可能的重复
  2. 将未合并的任何字符映射到备用字符串
  3. switch(badChar){
       case 'æ':
       return "ae";
       case 'ø':
       return "oe";
       // and so on
    }