关于C#输入流中utf8和中文汉字转化的问题

时间:2023-01-10 11:37:26
byte[] byData;
            char [] charData;
            string str;
            int x;
            int count = 0;
            
            FileStream aFile = new FileStream("../../../../设计/数据库/zx.txt", FileMode.Open);
            str = "这个是点";
            byData = new byte[21];
            charData = new char[21];
            aFile.Seek(0, SeekOrigin.Begin);
            aFile.Read(byData, 0, 21);
            Decoder d = Encoding.UTF8.GetDecoder();

            d.GetChars(byData, 0, 21, charData, 0, true);

            //x = Convert.ToInt32(new string(charData));
            //Console.WriteLine(byData[17]);
            //d.GetChars(byData, 0, 2, charData, 0, true);
            //x = Convert.ToInt32(new string(charData));
            Console.WriteLine(charData);
            Console.ReadKey();
我在文本中写入的数据为154这个是点way0515454515 为什么这个输入流在控制台上输出为154??????way0515454515 4个汉字按2个字符来算是8个字符,这里怎么少了两个字符呢?
我在写输出流的时候数据为 154this is new way0515454515 后来有输出"这个是点"从第三位替换,就成了"154这个是点way0515454515",
这说明替换掉了的是"this is new " 这12个字符,那么一个汉字有三个字符,请问这个怎么回事呢??

5 个解决方案

#1


System.Encoding.Default.GetString
試試這個 輸入是byte[] 輸出是string

#2


你是说在USING 上添加System.Encoding.Default.GetString 引用?

#3


1楼,我用了你的方法可以输出原来的汉字了,但是好像字体大了一点啊

#4


你所做的实际上是把汉字的utf-8编码编译成了另一种编码,在输出的时候只输出了编码的十进制显示,要再象一楼一样再进行一次ANSI编码才能把汉字显示出来,你把它编译成UTF-8的编码或是GB2312的编码应该也可以输出的。

#5


utf-8编码

#1


System.Encoding.Default.GetString
試試這個 輸入是byte[] 輸出是string

#2


你是说在USING 上添加System.Encoding.Default.GetString 引用?

#3


1楼,我用了你的方法可以输出原来的汉字了,但是好像字体大了一点啊

#4


你所做的实际上是把汉字的utf-8编码编译成了另一种编码,在输出的时候只输出了编码的十进制显示,要再象一楼一样再进行一次ANSI编码才能把汉字显示出来,你把它编译成UTF-8的编码或是GB2312的编码应该也可以输出的。

#5


utf-8编码