我試圖替換從Excel電子表格中檢索到的字符串中的一些不受歡迎的字符。原因在於我們的Oracle數據庫使用的是WE8ISO8859P1字符集,該字符集沒有定義Excel在您的文本中「幫助」插入的幾個字符(捲曲引號,em和破折號等)。由於我無法控制數據庫或如何創建Excel電子表格我需要用別的東西替換字符。替換從Excel讀取的字符串中的特定Unicode字符
我檢索單元格的內容轉換成字符串這樣的:
string s = xlRange.get_Range("A1", Missing.Value).Value2.ToString().Trim();
查看在Visual Studio中的文本Visualiser的字符串顯示文本是完整和正確檢索。接下來,我嘗試和更換不良分子(在這種情況下,右手卷曲報價符號)中的一個:
s = Regex.Replace(s, "\u0094", "\u0022");
但不起任何作用(文字Visualiser的表明它仍然在那裏)。爲了驗證我想替換的字符實際上在那裏,我嘗試過:
bool a = s.Contains("\u0094");
但它返回false。但是:
bool b = s.Contains("」");
返回true。
我在.NET中對字符串的理解是,它們使用UTF-16編碼,而Excel可能使用ANSI。那麼這是否意味着我需要更改文本的編碼,因爲它出自Excel?或者我在這裏做錯了什麼?任何建議將不勝感激。我已經閱讀並重新閱讀了所有關於Unicode和編碼的文章,但我仍然不明智。
是的,你說得很對,我的十六進制值是離開的。原來我使用WIN1252字符集的代碼點而不是UTF-16。有一天,我會理解所有這些(它將被難以理解的複雜性所取代)。感謝你的回答。 –