我有一个输入:DisplaygröÃe
我希望输出如:Displaygröÿe
使用notepad ++问题解决了:转换为ansi,编码为utf8并转换回ansi。
我需要在c#中以编程方式执行此操作。
我试过转换成ansi,utf8,latin-1并且没有正常工作,它表明了吗?使用Encoding.Default.GetBytes的函数,然后是
res = Enconding.Convert(src1,dest1,bytes)和
EncodingDest.GetChars(RES);
其中EncodingDest表示输出编码..
代码在控制台应用程序中运行,但WPF上的结果相同。 如果编码对输出有好处,那么这些问题也适用于像西班牙,意大利或瑞典这样的国家。
答案 0 :(得分:2)
var ascii = Encoding.ASCII.GetBytes("DisplaygröÃe");
var utf8 = Encoding.Convert(Encoding.ASCII, Encoding.UTF8, ascii);
var output = Encoding.UTF8.GetString(utf8);
答案 1 :(得分:1)
在某处输出字符串(如TextWriter
,Stream
或byte[]
)时,除非您需要UTF-8输出,否则应始终指定编码(默认值):
using(StreamWriter sw = new StreamWriter("file.txt", Encoding.GetEncoding("windows-1252"))
sw.WriteLine("Displaygröÿe");
答案 2 :(得分: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#来帮助你......我只会说字符编码。)
答案 3 :(得分:0)
using (var rdr = new StreamReader(fs, Encoding.GetEncoding(1252))) {
result = rdr.ReadToEnd();
}
答案 4 :(得分:0)
我们在向文本打印机发送数据时遇到了类似的问题,我只有一个工作就是这个(写成扩展名):
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;
}