我有一个奇怪的问题来替换字符串中的字符..。
我读了一个包含俄语文本的.txt文件,从一个从俄语到英语的字母列表(ru=en)开始,我循环这个列表,我想用英文字符替换俄语字符。
问题是:我可以在调试中看到正确的俄语阅读和正确的英语阅读,但是使用myWord = myWord.Replace(ruChar, enChar) ,字符串并没有被替换。
我的txt文件是UTF-8编码。
发布于 2010-05-14 18:09:20
String.Replace()将是非常低效的,您将不得不为您想要替换的每一个可能的西里尔字母调用它。用字典代替(没有双关意)。例如:
    private const string Cyrillic = "AaБбВвГг...";
    private const string Latin = "A|a|B|b|V|v|G|g|...";
    private Dictionary<char, string> mLookup;
    public string Romanize(string russian) {
        if (mLookup == null) {
            mLookup = new Dictionary<char, string>();
            var replace = Latin.Split('|');
            for (int ix = 0; ix < Cyrillic.Length; ++ix) {
                mLookup.Add(Cyrillic[ix], replace[ix]);
            }
        }
        var buf = new StringBuilder(russian.Length);
        foreach (char ch in russian) {
            if (mLookup.ContainsKey(ch)) buf.Append(mLookup[ch]);
            else buf.Append(ch);
        }
        return buf.ToString();
    }请注意,在拉丁文替换中,条形和拆分()函数是必要的,因为有些西里尔字母的音译需要多个字母。关键思想是使用字典进行快速查找,使用字符串生成器进行快速字符串构造。
这个联合国文件可能会有帮助。
发布于 2010-05-14 16:26:15
不要-1我,如果这不工作,我只是猜测,你必须UTF-8英语字符串,你想要替换,例如:
string myWord = Encoding.UTF8.GetString(Encoding.ASCII.GetBytes(myWord));
myWord = myWord.Replace("слово", Encoding.UTF8.GetString(Encoding.ASCII.GetBytes("letter")));我假设myWord在ASCII中,所以第一行代码将它转换为UTF-8字符串,但是如果它是UTF-8,则忽略它。
第二行将英语单词转换为UTF-8,这样就可以在俄语单词上替换它。
发布于 2010-05-14 16:38:21
很奇怪
Console.WriteLine("слово".Replace("слово", "word")); // prints 'word'按计划工作。也许是因为我把俄语设定为非unicode系统语言..。
https://stackoverflow.com/questions/2835637
复制相似问题