2011-01-05 72 views
1

我在我的C#應用​​程序操縱Unicode和ASCII字符集在C#

string [,] unicode2Ascii = { { "ஹ", "\x86" } };

&#3001這種映射 - 是泰米爾文字 「ஹ」 的Unicode值。這是MS Word作爲字節序列保存的unicode值的原始十六進制文字。我試圖將這些unicode值「字符串」映射到255以下的十六進制值(以適應非Unicode支持的系統)。

我試圖用與string.replace這樣的:

S = S.replace(unicode2Ascii[0,0], unicode2Ascii[0,1]); 

然而得到的輸出中有一個?而不是存儲的實際十六進制0x86。任何關於如何將該數組的第二個元素的編碼設置爲像windows-1252的指針?

或者是否有更好的方法來做這種轉換?

在此先感謝

回答

3

不知道這是否有幫助,但泰米爾語代碼頁「57004 - ISCII泰米爾語」是由Windows支持。

雖然上面的示例字符沒有給出相同的翻譯。對'''它給出了216.也許需要使用不同的代碼頁?

 string tamilUnicodeString = "ஹ"; 

     Encoding encoding = Encoding.GetEncoding("x-iscii-ta"); 

     byte[] codepageBytes = encoding.GetBytes(tamilUnicodeString); 

更新

如果你想採取一個Unicode文件作爲輸入,音譯字符得到一個字節表示,下面應該做的伎倆。如果您的字典對每個字符進行編碼,則生成的陣列應具有單字節表示形式:

 Dictionary<char, char> lookup = new Dictionary<char, char> 
     { 
      { 'ஹ', '\x86' }, 
      { 'இ', '\x87' }, 
      //next pair..., 
      //etc, etc. 
     }; 

     string input = "ஹஇதில் உள்ள தமிழ் எழுத்துக்கள் சரியாகத் தெரிந்தால்"; 

     char[] chars = input.ToCharArray(); 

     for (int i = 0; i < chars.Length; i++) 
     { 
      char replaceChar; 

      if (lookup.TryGetValue(chars[i], out replaceChar)) 
      { 
       chars[i] = replaceChar; 
      } 
     } 

     byte[] output = Encoding.GetEncoding("iso-8859-1").GetBytes(chars); 
+0

意圖不是檢索unicode字符的ascii代碼。相反,只需將其替換爲映射表中定義的「some」ascii代碼字符即可。基本上我想看看如何在.NET中將0x86表示爲一個字符串,以便我可以使用string.replace方法替換&#3001文字 – Murlex 2011-01-05 13:42:49

+0

@Murlex我很困惑,因爲您期待什麼結果將泰米爾語文本的unicode文件轉換爲代碼頁1252中的ANSI文件(如問題中所述)。誰是目標受衆? – 2011-01-05 13:58:35

+0

在UNICODE規範出臺之前,我們有一個名爲TSCII的泰米爾代碼頁標準(www.tscii.org)。仍然有一些系統不支持顯示泰米爾unicode字符所需的新形狀引擎。因此,我們有時需要將unicode文本「降級」爲1字節的TSCII標準。 – Murlex 2011-01-05 16:07:53

3

.NET中的字符串始終是Unicode內部。然而這並不重要。字符串是一系列字符,.NET字符串支持所有的Unicode字符。你不應該在乎他們如何在記憶中呈現。只有當你的字符串離開(或進入).NET時(即,當你將它們寫入(讀取)到文件,通過套接字發送(接收)到其他系統等),你纔會關心編碼。這是當你使用Encoding類轉換爲你想要的任何編碼時。替換字符或在.NET字符串上嘗試任何編碼技巧都毫無意義。 也我推薦這篇文章http://www.joelonsoftware.com/articles/Unicode.html

+0

是的練習的目的是修改文件的內容。感謝您的鏈接。將讀取以及.. – Murlex 2011-01-05 13:40:41

+0

然後,您修改該字符串,並且當您使用特定的編碼將文本字符串寫入文件。在.NET代碼中,您不需要使用任何unicode代碼點數字。您可以直接在.NET源代碼中使用該符號。 – Stilgar 2011-01-05 17:05:37

+0

再次感謝您的鏈接。我對從文件讀取和寫入文件時如何使用編碼有一些基本的瞭解。 – Murlex 2011-01-06 00:07:13