我需要得到葡萄牙文本內容了一個Excel文件,並創建要由不支持的字符,如「C」,「A」,「E」,和其他應用程序中使用的XML 。我不能刪除這些字符,而是將它們替換爲相應的字符(例如「c」,「a」,「e」)。如何用C#中的特殊字符(例如「á」代替「a」)?
我想有一個更好的方式來做到這一點比逐個檢查每個字符,並與同行進行更換。有關如何做的建議?
我需要得到葡萄牙文本內容了一個Excel文件,並創建要由不支持的字符,如「C」,「A」,「E」,和其他應用程序中使用的XML 。我不能刪除這些字符,而是將它們替換爲相應的字符(例如「c」,「a」,「e」)。如何用C#中的特殊字符(例如「á」代替「a」)?
我想有一個更好的方式來做到這一點比逐個檢查每個字符,並與同行進行更換。有關如何做的建議?
你可以嘗試像
var decomposed = "áéö".Normalise(NormalizationForm.FormD);
var filtered = decomposed.Where(c => char.GetUnicodeCategory(c) != UnicodeCategory.NonSpacingMark);
var newString = new String(filtered.ToArray());
這口音分解從文本,過濾它們,並創建一個新的字符串。結合變音符號在Non spacing mark unicode類別中。
喜奔,感謝你的片斷,但它沒有處理好字符L和L(讓他們作爲原來的地切換到L和L)。 – binball 2012-02-06 17:52:30
string text = {text to replace characters in};
Dictionary<char, char> replacements = new Dictionary<char, char>();
// add your characters to the replacements dictionary,
// key: char to replace
// value: replacement char
replacements.Add('ç', 'c');
...
System.Text.StringBuilder replaced = new System.Text.StringBuilder();
for (int i = 0; i < text.Length; i++)
{
char character = text[i];
if (replacements.ContainsKey(character))
{
replaced.Append(replacements[character]);
}
else
{
replaced.Append(character);
}
}
// 'replaced' is now your converted text
雖然它是最簡單的解決方案(也許不是最優雅的),但它確實是你想要的。如果你創建了一個可重用的函數(用一個靜態的替換列表)會更好。這種方法的一個缺點是,你需要知道你想要替換的所有可能的字符,並且必須在列表中添加大小寫字符(這可能需要一些試驗和錯誤)。另外,當複製添加語句以創建新項目(例如忘記替換某個字符串)時,您可能會犯錯誤,這些錯誤可能會導致錯誤發生。 – Gertjan 2010-03-09 10:43:13
以供將來參考,這正是我結束了:
temp = stringToConvert.Normalize(NormalizationForm.FormD);
IEnumerable<char> filtered = temp;
filtered = filtered.Where(c => char.GetUnicodeCategory(c) != System.Globalization.UnicodeCategory.NonSpacingMark);
final = new string(filtered.ToArray());
的執行是該解決方案更好:
string test = "áéíóúç";
string result = Regex.Replace(test .Normalize(NormalizationForm.FormD), "[^A-Za-z| ]", string.empty);
C和C不是「等同」。 – 2010-03-06 19:54:21
他們是爲沒有符號的人閱讀! – jehuty 2010-03-06 19:55:24