
关于C#用Write()写入流的问题
有程序如下:usingSystem;usingSystem.IO;usingSystem.Text;namespace_06_05{publicclassClass_06...
有程序如下:
using System;
using System.IO;
using System.Text;
namespace _06_05
{
public class Class_06_05
{
public static void Main(String[] args)
{
// 获取输出流
Stream s = Console.OpenStandardOutput();
string str1 = "Hello, world.";
string str2 = "你好,C#";
ASCIIEncoding ascii = new ASCIIEncoding();
byte[] bytes1 = ascii.GetBytes(str1);
byte[] bytes2 = ascii.GetBytes(str2);
s.Write(bytes1, 0, bytes1.Length);
Console.WriteLine();
s.Write(bytes2, 0, bytes2.Length);
s.Close();
}
}
}
在我认为,程序运行结果应是str1和str2两字符串转化为ASCII值的数字序列,可当我运行后却是:
Hello,world.
???C#
这是怎么回事?
再给详细讲解一下下面的片段:
ASCIIEncoding ascii = new ASCIIEncoding();
byte[] bytes1 = ascii.GetBytes(str1);
byte[] bytes2 = ascii.GetBytes(str2); 展开
using System;
using System.IO;
using System.Text;
namespace _06_05
{
public class Class_06_05
{
public static void Main(String[] args)
{
// 获取输出流
Stream s = Console.OpenStandardOutput();
string str1 = "Hello, world.";
string str2 = "你好,C#";
ASCIIEncoding ascii = new ASCIIEncoding();
byte[] bytes1 = ascii.GetBytes(str1);
byte[] bytes2 = ascii.GetBytes(str2);
s.Write(bytes1, 0, bytes1.Length);
Console.WriteLine();
s.Write(bytes2, 0, bytes2.Length);
s.Close();
}
}
}
在我认为,程序运行结果应是str1和str2两字符串转化为ASCII值的数字序列,可当我运行后却是:
Hello,world.
???C#
这是怎么回事?
再给详细讲解一下下面的片段:
ASCIIEncoding ascii = new ASCIIEncoding();
byte[] bytes1 = ascii.GetBytes(str1);
byte[] bytes2 = ascii.GetBytes(str2); 展开
4个回答
展开全部
当你要显示流的内容时,系统会自动以默认的unicode字符集显示流中的字节串.
ASCIIEncoding ascii = new ASCIIEncoding();// 这里是产生一个编解码的对象.
ASCII字符集中只有128个字符(英文和其他的一些符号).当遇到大于127的字符时就无法编解码.用'?'替代.
如果要对中文编码要使用支持中文字符集的编码.比如(unicode系列.GB2312)
byte[] bytes1 = Encoding.Default.GetBytes(str1);// 采用系统的语言编码, 简体中文版的是GB2312编码.
或者byte[] bytes1 = Encoding.UTF8.GetBytes(str1);// 采用UTF8编码
汉字的编码是这样的:
一共有65536个字符
0-127的和ASCII的一样.大于127的是一些中文,日文和一些特殊的符号等.
小于127时,用单字节表示.
大于127时,用双字节表示.其中第一个字节大于127
这样系统在读取字节时发现如果一个字节大于127时就会再读取一个字节来组成一个双字节的字符.然后解码.
例如:
Encoding.GetEncoding("gb2312").GetBytes("中") //得到 214,208
Encoding.ASCII.GetBytes("中") // 得到 63
ASCIIEncoding ascii = new ASCIIEncoding();// 这里是产生一个编解码的对象.
ASCII字符集中只有128个字符(英文和其他的一些符号).当遇到大于127的字符时就无法编解码.用'?'替代.
如果要对中文编码要使用支持中文字符集的编码.比如(unicode系列.GB2312)
byte[] bytes1 = Encoding.Default.GetBytes(str1);// 采用系统的语言编码, 简体中文版的是GB2312编码.
或者byte[] bytes1 = Encoding.UTF8.GetBytes(str1);// 采用UTF8编码
汉字的编码是这样的:
一共有65536个字符
0-127的和ASCII的一样.大于127的是一些中文,日文和一些特殊的符号等.
小于127时,用单字节表示.
大于127时,用双字节表示.其中第一个字节大于127
这样系统在读取字节时发现如果一个字节大于127时就会再读取一个字节来组成一个双字节的字符.然后解码.
例如:
Encoding.GetEncoding("gb2312").GetBytes("中") //得到 214,208
Encoding.ASCII.GetBytes("中") // 得到 63
展开全部
ASCIIEncoding ascii = new ASCIIEncoding(); 生成一个解码的类对象,该类目的是一个编码字节序列转换为一组 Unicode 字符
ascii.GetBytes(str1);将str1所有unicode字符编码为一个字节序列
ascii.GetBytes(str2);将str2所有unicode字符编码为一个字节序列
并且将字节序列存入字节数组,最后将其输出。
所以最后结果因该是字节输出,中文输不出来,只能输出西文。
ascii.GetBytes(str1);将str1所有unicode字符编码为一个字节序列
ascii.GetBytes(str2);将str2所有unicode字符编码为一个字节序列
并且将字节序列存入字节数组,最后将其输出。
所以最后结果因该是字节输出,中文输不出来,只能输出西文。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
将
ASCIIEncoding ascii = new ASCIIEncoding();
byte[] bytes1 = ascii.GetBytes(str1);
byte[] bytes2 = ascii.GetBytes(str2);
修改为
byte[] bytes1 = System.Text.Encoding.Default.GetBytes(str1);
byte[] bytes2 = System.Text.Encoding.Default.GetBytes(str2);
即直接使用System.Text.Encoding类的静态对象进行编码,不用创建对象,default是系统计默认的编码方式,适用中英文,当然你也可以使用Unicode或其它编码方式,但不能使用ASCII。
ASCIIEncoding ascii = new ASCIIEncoding();
byte[] bytes1 = ascii.GetBytes(str1);
byte[] bytes2 = ascii.GetBytes(str2);
修改为
byte[] bytes1 = System.Text.Encoding.Default.GetBytes(str1);
byte[] bytes2 = System.Text.Encoding.Default.GetBytes(str2);
即直接使用System.Text.Encoding类的静态对象进行编码,不用创建对象,default是系统计默认的编码方式,适用中英文,当然你也可以使用Unicode或其它编码方式,但不能使用ASCII。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
ASCII没有中文的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询