2011-11-03 78 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#来帮助你...我只说字符编码。)