2011-11-03 90 views
-2

我有一個輸入像:DisplaygröÃec#編碼問題與?

,我想輸出像:Displaygröÿe

與記事本++問題通過解決:轉換爲ANSI,編碼UTF8和轉換回ANSI。

我需要在c#中以編程方式執行此操作。

我試過轉換爲/從ansi,utf8,拉丁-1和沒有正常工作,它顯示?使用Encoding.Default.GetBytes函數,然後
res = Enconding.Convert(src1,dest1,bytes)和
EncodingDest.GetChars(res);
其中EncodingDest表示輸出編碼..

代碼在控制檯應用程序中運行,但在WPF中運行的結果相同。 編碼無關緊要,只有在有效時纔會輸出,這些問題也適用於西班牙,意大利或瑞典等國家。

+0

請說清楚。輸出必須是Ansi嗎?如果是這樣,什麼代碼頁? –

+0

需要一些更多的信息在這裏。你在哪裏輸出這個?網頁,控制檯應用程序,WinForms,WPF,Web服務結果?理想情況下,發佈代碼示例。 –

+0

數據來自哪裏(採用什麼格式/編碼) – Deanna

回答

1

當你輸出字符串的地方(如TextWriter,或Stream,或byte[]),你應該總是指定的編碼,除非你想要的UTF-8輸出(默認的):

using(StreamWriter sw = new StreamWriter("file.txt", Encoding.GetEncoding("windows-1252")) 
    sw.WriteLine("Displaygröÿe"); 
+0

問題是我沒有訪問寫入數據。只有閱讀。 – DanM

2

使用System.Text.Encoding

var ascii = Encoding.ASCII.GetBytes("DisplaygröÃe"); 
var utf8 = Encoding.Convert(Encoding.ASCII, Encoding.UTF8, ascii); 
var output = Encoding.UTF8.GetString(utf8); 
+1

還是顯示???? – DanM

+0

@DanM:你調整了這個例子嗎?在這個例子中,使用了Encoding.ASCII編碼,但是你也許需要'Encoding.Default'。 – Vlad

+1

是的,但如果我用Unicode讀取,它只顯示漢字和轉換後只有?????? – DanM

0
using (var rdr = new StreamReader(fs, Encoding.GetEncoding(1252))) { 
    result = rdr.ReadToEnd(); 
} 
+0

它顯示:Displaygröße – DanM

0

發送時,文本打印數據,並且只有一個我獲得工作,我們也有類似的問題是這樣的(writt EN爲擴展名):

public static byte[] ToAnsiMemBytes(this string input) 
    { 
     int length = input.Length; 
     byte[] result = new byte[length]; 

     try 
     { 
      IntPtr bytes = Marshal.StringToCoTaskMemAnsi(input); 
      Marshal.Copy(bytes, result, 0, length); 
     } 
     catch (Exception) 
     { 
      result = null; 
     } 

     return result; 
    } 
1

@DanM:您需要知道什麼字符集的輸入是

「DisplaygröÃe」是你會看到什麼,如果你把字符串。 「Displaygröße」(由Vlad建議)將其按字節編碼爲UTF-8,然後將其錯誤地解碼爲latin1。

如果您對Displaygröÿe做了同樣的處理,您會看到「Displaygröÿe」(倒置問號實際上存在,它不是無法顯示的東西的佔位符)。從技術上講,「Displaygrà 「¶」可能在Ãe之間有另一個字符,但它是一個控制代碼,因此對您而言是不可見的。

如果你有一個字符集foo,這是真的:my_string = foo_decode(foo_encode(my_string))。如果你有另一個字符集欄,這是真的:barf = bar_decode(foo_encode(my_string))其中barf是垃圾就像你看到的。

如果你不知道你的輸入是什麼字符集,你只能偶然地正確解碼它。

看來你的輸入文件是UTF-8,你需要解碼文件中的字節。 (我沒有說足夠的C#來幫助你...我只說字符編碼。)