将问题ANSI转换为UTF8 C#

Jah*_*Can 8 c# encoding ansi utf-8

我在c#中将文本文件从ANSI转换为UTF8时遇到问题.我尝试在浏览器中显示结果.

所以我有一个带有许多重音字符的文本文件.它用ANSI编码,因此我必须将其转换为utf8,因为在浏览器中而不是出现"?"的重音符号.无论我如何尝试转换为UTF8,它仍然是"?".但是,如果我将notepad ++中的文本文件转换为utf8,那么重音符号就会显示出来.

这是我编写的代码的和平:

    public string Encode(string text)
    {
        // encode the string as an ASCII byte array
        byte[] myASCIIBytes = ASCIIEncoding.ASCII.GetBytes(text);

        // convert the ASCII byte array to a UTF-8 byte array
        byte[] myUTF8Bytes = ASCIIEncoding.Convert(ASCIIEncoding.ASCII, UTF8Encoding.UTF8, myASCIIBytes);

        // reconstitute a string from the UTF-8 byte array 
        return UTF8Encoding.UTF8.GetString(myUTF8Bytes);
    }
Run Code Online (Sandbox Code Playgroud)

你知道为什么会这样吗?

Hen*_*man 16

你知道为什么会这样吗?

是的,你来不及了.从文件中读取字符串时需要指定ANSI.在内存中,它始终是Unicode(UTF16).


And*_*rey 8

当您转换为ASCII时,您会立即丢失所有非英语字符(包括带有重音的字符),因为ASCII只有127(7位)字符.

你做了奇怪的操纵.string在.net是UTF-16,所以一旦你回来string,byte[]不是没关系.

我认为你应该这样做:(我想用ANSI你的意思是Latin1)

public byte[] Encode(string text)
{
    return Encoding.GetEncoding(1252).GetBytes(text);
}
Run Code Online (Sandbox Code Playgroud)

由于问题不是很清楚,有一个合理的说法,你可能真的需要这个:

public string Decode(byte[] data)
{
    return Encoding.GetEncoding(1252).GetString(data);
}
Run Code Online (Sandbox Code Playgroud)


小智 6

这可能是最简单的方法:

byte[] ansiBytes = File.ReadAllBytes("inputfilename.txt");
var utf8String = Encoding.Default.GetString(ansiBytes);
File.WriteAllText("outputfilename.txt", utf8String);
Run Code Online (Sandbox Code Playgroud)