2011-08-29 161 views
3

我試圖獲取和解析在希伯來語中編寫的在線excel文檔,但不幸的是在非希伯來語編碼中。C#Encoding.Converting拉丁語到希伯來語

作爲一個例子,我試圖將以下字符串轉換爲:「âìåïï_1」,它用作使用C#代碼的希伯來語的第一個表名,但我無法這麼做。

我知道上面是可轉換的,因爲當我在NotePad ++中打開它並選擇Encoding/Character Sets/Hebrew/Windows 1255時,我可以看到:「גליון_1」,它是上述字符串的正確希伯來表示形式。

我使用下面的代碼

  string str = "âìéåï_1"; 

      Encoding windows = Encoding.GetEncoding("Windows-1255"); 
      Encoding ascii = Encoding.GetEncoding("Windows-1252"); 
      byte[] asciiBytes = ascii.GetBytes(str); 
      byte[] windowsBytes = Encoding.Convert(ascii, windows, asciiBytes); 

      char[] windowsChars = new char[windows.GetCharCount(windowsBytes, 0, windowsBytes.Length)]; 
      windows.GetChars(windowsBytes, 0, windowsBytes.Length, windowsChars, 0); 
      string windowsString = new string(windowsChars); 

我認爲起源字符串編碼爲Windows-1252,因爲當我把它粘貼在記事本++和更改編碼到Windows 1252的串仍然是相同...

我可能在這裏做錯了什麼,任何人都知道如何正確地轉換上述內容?

感謝,

米奇

回答

12
const string Str = "âìéåï_1"; 

Encoding latinEncoding = Encoding.GetEncoding("Windows-1252"); 
Encoding hebrewEncoding = Encoding.GetEncoding("Windows-1255"); 

byte[] latinBytes = latinEncoding.GetBytes(Str); 

string hebrewString = hebrewEncoding.GetString(latinBytes); 

hebrewString:

גליון_1

在你提供的示例 「窗口 - 1252」 不是actualy ASCII,它被延長ASCII,並由於某種原因Encoding.Convert與如果兩個編碼不能轉換擴展範圍的ASCII,則所有+127個字符都轉換爲63(即, ?)。當從一個擴展的ASCII字符byte []轉換爲另一個時,我期望字節是相同的,只有當你將它們轉換爲一個.Net unicode字符串時,我預計它們會不同。不知道爲什麼Convert正在將+127個字符轉換爲'?'。

+1

很好地完成!非常感謝! –

相關問題