C#学习教程:将问题ANSI转换为UTF8C#我尝试在浏览器中显示结果。所以我有一个包含许多重音字符的文本文件。它是用ANSI编码的,所以我必须将它转换为utf8,因为在浏览器中而不是重音符号“?”出现。无论我如何尝试转换为UTF8,它仍然是“?”。但是,如果我将notepad++中的文本文件转换为utf8,则会显示重音符号。这是我所做的编码代码的和平:publicstringEncode(stringtext){//将字符串编码为ASCII字节数组byte[]myASCIIBytes=ASCIIEncoding.ASCII.GetBytes(text);//将ASCII字节数组转换为UTF-8字节数组byte[]myUTF8Bytes=ASCIIEncoding.Convert(ASCIIEncoding.ASCII,UTF8Encoding.UTF8,myASCIIBytes);//从UTF-8字节数组中重构一个字符串returnUTF8Encoding.UTF8.GetString(myUTF8Bytes);你知道为什么会这样吗?你知道为什么会这样吗?是的,你来不及了。从文件中读取字符串时需要指定ANSI。在内存中,它始终是Unicode(UTF16)。当您转换为ASCII时,您会立即丢失所有非英语字符(包括带重音符号的字符),因为ASCII只有127个(7位)字符。你做了奇怪的操作。.net中的字符串是UTF-16,所以一旦返回字符串而不是byte[]就没关系了。我认为你应该这样做:(我猜你是指Latin1的ANSI)publicbyte[]Encode(stringtext){returnEncoding.GetEncoding(1252).GetBytes(text);}由于问题不是很清楚,有一个合理的论据表明您可能实际上需要这个:publicstringDecode(byte[]data){returnEncoding.GetEncoding(1252).GetString(data);这可能是最简单的方法:byte[]ansiBytes=File.ReadAllBytes("inputfilename.txt");varutf8String=Encoding.Default.GetString(ansiBytes);File.WriteAllText("输出文件名.txt",utf8String);我推荐阅读这个http://www.joelonsoftware。com/articles/Unicode.html。如果要读取ASCII文件,则需要知道该文件的代码页。这可能是因为您的原始字符串文本已经包含无效字符。只有当您的输入是字节数组时,编码转换才有意义。因此,您应该将文件作为字节数组而不是字符串来读取,或者如Henk所说,指定用于读取文件的编码。我的想法是,当您在Notepad++中保存文件时,它会插入字节顺序标记,因此浏览器可以从中推断出它是UTF8。否则,你可能不得不显式地告诉浏览器字符编码,如DTD、XML等。以上是C#学习教程:ConvertingtheproblemANSItoUTF8C#分享的全部内容。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。涉及侵权,请点击维权联系管理员删除。如需转载请注明出处:
