我有一个奇怪的问题串置换字符....NET字符串替换俄语到英语
我读取包含俄文本.txt文件,并从以英文字母俄语列表(RU = EN开始),我循环列表,我想用俄文字符替换俄文字符。
问题是:我可以在调试中看到正确的阅读俄文和正确的阅读英文,但使用myWord = myWord.Replace(ruChar, enChar)
字符串不被替换。
我的txt文件是UTF-8编码。
我有一个奇怪的问题串置换字符....NET字符串替换俄语到英语
我读取包含俄文本.txt文件,并从以英文字母俄语列表(RU = EN开始),我循环列表,我想用俄文字符替换俄文字符。
问题是:我可以在调试中看到正确的阅读俄文和正确的阅读英文,但使用myWord = myWord.Replace(ruChar, enChar)
字符串不被替换。
我的txt文件是UTF-8编码。
不要-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,因此它可以替换为俄文单词。
很奇怪
Console.WriteLine("слово".Replace("слово", "word")); // prints 'word'
工程按计划进行。也许是因为我把俄语设置为非Unicode系统语言。
不适合我...我在塞尔维亚也是这样做的......系统设置很好,我猜。 = D而且,SLOVO表示信件,而不是WORD。 = p – Cipi 2010-05-14 16:41:43
Slovo意思是字,Bukva是字母... – 2010-05-14 16:48:16
@Cipi:在塞尔维亚语中,是的,是指。在俄语 - слово(字),буква(字母):) – abatishchev 2010-05-16 10:42:19
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();
}
注意的酒吧和分割()函数如何是必要的,拉丁更换,因为一些西里尔字母需要为他们的音译多个字母。主要思想是使用字典进行快速查找,并使用字符串生成器来快速构建字符串。
此United Nations document可能会对您有所帮助。
纯粹挑剔,但TryGetValue()比ContainsKey()更适合,我认为 – 2010-07-16 14:35:11
请向我们展示代码和文件。 – SLaks 2010-05-14 16:08:42
而myWord.IndexOf(ruChar)返回-1 ...?我首先将两者转换为char []并通过特征检查它们的特征。 – 2010-05-14 17:18:05