2010-09-06 179 views
5

我必須創建一些文本文件,其中有數字和希伯來字母解碼爲ASCII。如何將希伯來語(unicode)轉換爲c#中的Ascii?

這是引發上ButtonClick

文件創建方法
protected void ToFile(object sender, EventArgs e) 
{ 
    filename = Transactions.generateDateYMDHMS(); 
    string path = string.Format("{0}{1}.001", Server.MapPath("~/transactions/"), filename); 
    StreamWriter sw = new StreamWriter(path, false, Encoding.ASCII); 
    sw.WriteLine("hello"); 
    sw.WriteLine(Transactions.convertUTF8ASCII("שלום")); 
    sw.WriteLine("bye"); 
    sw.Close(); 
} 

,你可以看到,我使用Transactions.convertUTF8ASCII()靜態方法來從可能Unicode字符串從.NET到它的ASCII表示形式轉換。我將它用於希伯來語'沙洛姆'這個術語,然後回來'????'而不是我需要的結果。

這裏是方法。

public static string convertUTF8ASCII(string initialString) 
{ 
    byte[] unicodeBytes = Encoding.Unicode.GetBytes(initialString); 
    byte[] asciiBytes = Encoding.Convert(Encoding.Unicode, Encoding.ASCII, unicodeBytes); 
    return Encoding.ASCII.GetString(asciiBytes); 
} 

而不是將最初的單詞解碼爲ASCII我得到'????'在我創建的文件中,即使我運行debbuger我也會得到相同的結果。

我做錯了什麼?

+0

嗨,那麼你怎麼解決它?我有同樣的問題。需要將希伯來語unicode(1400,1500等)轉換爲ASCII碼。 – 2013-02-16 17:19:49

回答

2

您不能簡單地將任意unicode字符轉換爲ASCII。它能做的最好的是放棄不支持的字符,因此????。顯然,基本的7位字符可以工作,但不是其他的。我很好奇預期的結果是什麼?

如果你需要轉移(而不是表示),你可能會考慮底層UTF8字節的base-64編碼。

+0

謝謝,馬克。我在示例文件中有這種字符,雖然它不代表'shalom',但您會了解它是什麼類型的編碼。我無法理解「轉移」到base-64的意思。 – eugeneK 2010-09-06 08:22:01

+0

@eugeneK - 它對我來說依然不明顯。我懷疑我需要查看確切的字節序列和字符代碼點,它們應該映射到彼此以便「點擊」。 – 2010-09-06 08:25:24

+0

我有錯誤的要求,導致我在第一個地方的ASCII。無論如何感謝您的信息。 – eugeneK 2010-09-06 12:08:52

2

你也許是指ANSI而不是ASCII?

ASCII未定義任何希伯來字符。然而有一些ANSI代碼頁行這樣的「窗口-1255」

在這種情況下,你可能要考慮尋找: http://msdn.microsoft.com/en-us/library/system.text.encoding.aspx

總之,在這裏你有:

Encoding.ASCII 

您將其替換爲:

Encoding.GetEncoding(1255) 
+0

你可能是對的。我沒有編碼的經驗,因此我從來不知道ASCII不包含希伯來文字符 – eugeneK 2010-09-06 08:48:06

+0

@eugueK ASCII幾乎就是英文字母,0-9,基本標點和一些控制字符。參考:http://en.wikipedia.org/wiki/ASCII – userx 2010-09-06 08:52:00

+0

nopes,我有錯誤的要求,導致我在第一個地方的ASCII。無論如何感謝您的信息。 – eugeneK 2010-09-06 12:07:16

1

你也許問transliteration(如 「Romanization」)我除了編碼轉換,如果你真的在談論ASCII?

+0

nopes,我有錯誤的要求,導致我在第一個地方的ASCII。無論如何感謝您的信息。 – eugeneK 2010-09-06 12:06:14

1

我剛剛遇到同樣的問題,當原始XML文件在ASCII編碼。

隨着用戶X建議

Encoding.GetEncoding(1255)

XDocument.Parse(System.IO.File.ReadAllText(xmlPath, Encoding.GetEncoding(1255))); 

所以現在我的XDocument文件可以讀希伯來語,即使XML文件保存爲ASCII