在二进制读写器C#中使用编码有什么好处?

在二进制读写器C#中使用编码有什么好处?,c#,C#,我正在学习二进制读写器库 我想知道编码作为参数的重要性 创建二进制读写器的新对象 我试着做了很多事情,比如编写代码 FileStream fs = new FileStream("hello.bin", FileMode.Open, FileAccess.ReadWrite, FileShare.None); BinaryWriter ws = new BinaryWriter(fs, Encoding.UTF8); ws.Write("Hello world

我正在学习二进制读写器库

我想知道编码作为参数的重要性

创建二进制读写器的新对象

我试着做了很多事情,比如编写代码

FileStream fs = new FileStream("hello.bin", FileMode.Open, FileAccess.ReadWrite, FileShare.None);

        BinaryWriter ws = new BinaryWriter(fs, Encoding.UTF8);

        ws.Write("Hello world ");


        using (BinaryReader rs = new BinaryReader(fs, Encoding.ASCII))
        {
            rs.BaseStream.Seek(0, SeekOrigin.Begin);
            string name =rs.ReadString();
            Console.WriteLine(name);
        }


            Console.ReadKey();
但即使我更改了编码,也会输出相同的结果“hello world”

在二进制读取器中,可以读取任何东西,如utf-7、ascii


谢谢:)

在这种情况下,您所使用的所有字符集中的字符都是相同的。这就是为什么没有区别。字符0-127在ASCII、UTF-8、几种ISO8859编码等中是相同的


例如,尝试使用UTF8编码字符串“ąęįšå”,然后使用ASCII读回。你会看到区别的。因此,在写入数据时,您的读写器通常必须匹配。否则,可能会读取错误的字符,甚至在字符无效时会出现异常。例如,如果您将该字符串写为ISO8859-1,然后读取为UTF-8,则会出现无效的代码点

在这种情况下,您所写的字符在您使用的所有字符集中都是相同的。这就是为什么没有区别。字符0-127在ASCII、UTF-8、几种ISO8859编码等中是相同的


例如,尝试使用UTF8编码字符串“ąęįšå”,然后使用ASCII读回。你会看到区别的。因此,在写入数据时,您的读写器通常必须匹配。否则,可能会读取错误的字符,甚至在字符无效时会出现异常。例如,如果您将该字符串写为ISO8859-1,然后读取为UTF-8,则会出现无效的代码点

您看不到区别,因为“Hello world”包含两个字符集中都可用的字符。值得一读:二进制数据您不应该使用编码,因为它会损坏数据。即使是UTF8也会更改0x80的值。@jdweng仅当您出于某种原因将其写为字符串时。BinaryWriter/Reader不会对字符串以外的任何内容使用编码。@Sami Kuhmonen:我不确定。看到太多问题,无法100%确定编码不会导致二进制编写器/读取器出现问题。大多数二进制数据包含ASCII字符串并包含CRC。因此,如果字符串被更改,CRC将失败。您看不到区别,因为“Hello world”包含两个字符集中都可用的字符。值得一读:二进制数据您不应该使用编码,因为它会损坏数据。即使是UTF8也会更改0x80的值。@jdweng仅当您出于某种原因将其写为字符串时。BinaryWriter/Reader不会对字符串以外的任何内容使用编码。@Sami Kuhmonen:我不确定。看到太多问题,无法100%确定编码不会导致二进制编写器/读取器出现问题。大多数二进制数据包含ASCII字符串并包含CRC。因此,如果字符串被更改,CRC将失败。使用二进制数据编码是危险的!!!不要对任何二进制数据使用编码。@jdweng正如我已经评论过的,BinaryReader/Writer不会以任何方式更改二进制数据,并且它始终使用编码。它只会影响字符串。使用二进制数据编码是危险的!!!不要对任何二进制数据使用编码。@jdweng正如我已经评论过的,BinaryReader/Writer不会以任何方式更改二进制数据,并且它始终使用编码。它只影响字符串