C# 字符串英语化?

C# 字符串英语化?,c#,.net,internationalization,normalization,C#,.net,Internationalization,Normalization,有人知道用什么简单的方法把字符串英语化吗?目前,在我们的系统中,我们正在对“无效”字符进行替换,如下所示: ret = ret.Replace("ä", "ae"); ret = ret.Replace("Ä", "Ae"); ret = ret.Replace("ß", "ss"); ret = ret.Replace("ç", "c"); ret = ret.Replace("Ç", "C");

有人知道用什么简单的方法把字符串英语化吗?目前,在我们的系统中,我们正在对“无效”字符进行替换,如下所示:

        ret = ret.Replace("ä", "ae");
        ret = ret.Replace("Ä", "Ae");
        ret = ret.Replace("ß", "ss");
        ret = ret.Replace("ç", "c");
        ret = ret.Replace("Ç", "C");
        ret = ret.Replace("Ž", "Z");
这里的问题是,当我们在其他国家(土耳其、俄罗斯、匈牙利……)开展业务时,我们发现有大量字符无法转换

有人知道有什么解决方案可以让我们不依赖于“无效”字符表吗

此外,如果有帮助的话,我们正在使用C#进行编码。:)

谢谢


编辑:


作为对一些评论的回应,我们的系统确实支持全套unicode字符。。。但是,我们集成到的其他系统(如卡处理器)没有:(

查看及其答案,并了解如何将变音字符转换为ASCII等效字符。

仅仅因为字母看起来类似于传统英语字母,并不意味着它是等效的。除了支持Unicode和您的读者选择使用的任何字符之外,还有什么商业理由?

作为答案对于修改后的问题(邮件服务器仅支持用户名中的字母数字字符):


让用户选择自己的用户名,只允许使用字母数字字符。他们可能最知道如何“英语化”它。

我为一个无耻的插件道歉,但我无法抗拒。我曾经编写了一个Python模块,它完全满足了文章作者的需要:

因为Python几乎和伪代码一样可读,并且模块只有大约125行,所以用C#重写它相对容易

以下是模块根据原始帖子的输入生成的内容:

$ echo 'ä Ä ß ç Ç Ž' | anglicize
a A ss s S S
如你所见,“ß”按要求被替换为“ss”,而“ç”、“Ž”和“Ž”则分别被替换为“s”、“s”和“s”,这可能是因为这些是英语中的语音对应词

至于“ä”和“Ä”,音译“ae”和“ae”可能比“a”和“a”更有效。如果语言学家确认这样做是正确的,我将很乐意更改音译表


该模块可以一次对整个输入文本进行音译,也可以分块处理输入数据。文档位于该模块附带的自述文件中。

几乎可以保证总会有一些奇怪的语言,其中包含一些奇怪的字符,这些字符会从裂缝中消失;为什么不将您的应用程序更改为support unicode?一种奇怪的语言,就像世界上除了英语以外的任何语言一样?@Carl:因为系统似乎是用C#编写的,所以可以假设它已经支持unicode。在某些文本处理场景中,您可能不希望使用变音字符(索引、词干或其他形式的文本“规范化”)如果你是在俄罗斯开放的,那么在这种情况下,你所说的“英语化”是什么意思呢?对于西里尔语来说,你的例子并没有真正意义,因为许多字母看起来一样,但意思却不一样(例如,俄语的“h”对应英语的“N”).你可以选择完整的音译,但这对用户来说不是很友好,对吧…我很确定你的意思是英语化grinI实际上刚刚尝试过这种方法,它似乎并没有抓住每一个字符o@Tyllyn:在事实上,翻译也可能依赖于语言。在瑞典语中,“ö”被映射为“o”,而在德语中,你可以将其表示为“oe”。@divo:天哪,这让一切变得更加混乱。我们的邮件服务器(我们即将更换)不支持[a-zA-Z0-9]之外的字符为用户名设置。我们正在使用的卡处理器在某些时候不支持它。从我们的业务实践来看,我们不限于此有限的字符集……而且,在转到其他系统时,它会导致问题。:(我们将转到路由,以确保用户名正确地放入[a-zA-Z0-9]但是,至少在电子邮件部分,不允许我们处理预先存在的用户名。此外,通过一个卡片处理器,我们向他们发送一个需要“英语化”的文件以前的版本。需要转换的字段包括地址和名称。我们可以允许用户输入正确的英语化解决方案,但这肯定会导致以我们的速度继续这些操作的速度减慢,从而影响整个业务。我们希望用户尽可能少地参与。