.NET 字符串将俄语替换为英语

Fab*_*bio 1 c# string replace utf-8

我在替换字符串中的字符时遇到一个奇怪的问题......

我读了一个包含俄语文本的 .txt 文件,并从俄语到英语的字母列表(ru=en)开始,我循环该列表,我想用英语字符替换俄语字符。

问题是:我可以在调试中看到俄语的正确阅读和英语的正确阅读,但使用的myWord = myWord.Replace(ruChar, enChar) 字符串没有被替换

我的txt文件是UTF-8编码的。

Han*_*ant 5

String.Replace() 的效率非常低,您必须为您想要替换的每个可能的西里尔字母调用它。请改用字典(无双关语)。例如:

\n\n
    private const string Cyrillic = "Aa\xd0\x91\xd0\xb1\xd0\x92\xd0\xb2\xd0\x93\xd0\xb3...";\n    private const string Latin = "A|a|B|b|V|v|G|g|...";\n    private Dictionary<char, string> mLookup;\n\n    public string Romanize(string russian) {\n        if (mLookup == null) {\n            mLookup = new Dictionary<char, string>();\n            var replace = Latin.Split(\'|\');\n            for (int ix = 0; ix < Cyrillic.Length; ++ix) {\n                mLookup.Add(Cyrillic[ix], replace[ix]);\n            }\n        }\n        var buf = new StringBuilder(russian.Length);\n        foreach (char ch in russian) {\n            if (mLookup.ContainsKey(ch)) buf.Append(mLookup[ch]);\n            else buf.Append(ch);\n        }\n        return buf.ToString();\n    }\n
Run Code Online (Sandbox Code Playgroud)\n\n

请注意在拉丁语替换中如何需要条形图和 Split() 函数,因为某些西里尔字母需要多个字母才能进行音译。关键思想是使用字典进行快速查找,并使用字符串生成器进行快速字符串构建。

\n\n

这份联合国文件可能会有所帮助。

\n