我有一個奇怪的問題串置換字符....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