4

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

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

但它没有奏效。字符串保持相同的方式。

4

2 回答 2

13

请参阅:.NET 音译库是否存在?

UnidecodeSharpFork

用法:

var result = "Helloæ".Unidecode();
Console.WriteLine(result) // Prints Helloae
于 2013-06-28T14:48:56.653 回答
1

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

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

  1. 根据可能重复的链接删除变音符号和组合字符
  2. 将未组合的任何剩余字符映射到备用字符串
switch(badChar){
   case 'æ':
   return "ae";
   case 'ø':
   return "oe";
   // and so on
}
于 2013-06-28T14:30:27.923 回答