首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >.NET字符串将俄语替换为英语

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

Stack Overflow用户
提问于 2010-05-14 16:05:20
回答 3查看 3.9K关注 0票数 1

我有一个奇怪的问题来替换字符串中的字符..。

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

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

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

EN

回答 3

Stack Overflow用户

发布于 2010-05-14 18:09:20

String.Replace()将是非常低效的,您将不得不为您想要替换的每一个可能的西里尔字母调用它。用字典代替(没有双关意)。例如:

代码语言:javascript
运行
复制
    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();
    }

请注意,在拉丁文替换中,条形和拆分()函数是必要的,因为有些西里尔字母的音译需要多个字母。关键思想是使用字典进行快速查找,使用字符串生成器进行快速字符串构造。

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

票数 4
EN

Stack Overflow用户

发布于 2010-05-14 16:26:15

不要-1我,如果这不工作,我只是猜测,你必须UTF-8英语字符串,你想要替换,例如:

代码语言:javascript
运行
复制
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,这样就可以在俄语单词上替换它。

票数 0
EN

Stack Overflow用户

发布于 2010-05-14 16:38:21

很奇怪

代码语言:javascript
运行
复制
Console.WriteLine("слово".Replace("слово", "word")); // prints 'word'

按计划工作。也许是因为我把俄语设定为非unicode系统语言..。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2835637

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档