将特殊字符转换为普通字符

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

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

1
@James 这个解决方案对于字符串 Helloæ 无效。 - Dustin Kingen
嗯,@James,我已经尝试实现了重复的方法,但它并不起作用。 - hsim
@HerveS 好的,我理解。不过很遗憾我无法撤销我的关闭投票,尽管如此,这仍然是一个重复的问题。你是否尝试过问题中的其他答案?有多种方法可以解决它。 - James
1
是的,我已经尝试了问题中发布的两种类似的方法,但它们都不起作用。如果您知道任何方法,请随时提供。我仍在寻找一种解决方法。 - hsim
1
你的注释“请注意,此方法仅接受UTF-8输入”不适用于你的函数,因为它不是以字节数组而是以字符串对象作为输入。字符串对象独立于任何编码。一旦你将UTF8字节数组转换为字符串,它就与任何其他字符串相同。 - wborgsm
显示剩余3条评论
2个回答

15

我正前往查看UnidecodeSharpFork。那将是一个好工具。 - hsim
这是一个基于Perl和Python中其他表格编译的音译表。 - Dustin Kingen
这似乎是更好的解决方案,因为它消除了选择要转译哪些字符的负担。 - Mgetz
在使用之前,我不太确定这个许可证的情况,所以你可能需要进行调查。 - Dustin Kingen
是的 :) 正是我想要的。谢谢! - hsim

1

没有直接的映射关系将æae转换为完全不同的Unicode代码点。如果您需要这样做,最可能需要编写一个函数,将有问题的代码点映射到所需的字符串。

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

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

是的,那可能是一个解决方案。我必须承认我不知道如何做到这一点。我会更新我的帖子,展示我迄今为止所做的(并且没有起作用)。 - hsim
“æ”是由字母“ae”组成的。 - James
@James 实际上不是这样,请查找相关的Unicode,那是一个独立的字符U+00E6,因此不存在组合字符。 - Mgetz
我不知道如何进行第二步。你能指导我吗? - hsim
好的,我想我明白你的观点了,而且几乎所有的评论都指向这个解决方案。我想我会实现类似的东西,如果它有效的话,我会再联系你的。 - hsim
使用类似于这个答案中的switch应该比我建议的字典更快。在switch的末尾添加default: return badChar; - wborgsm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接