关于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);
展开
 我来答
cnbf
2007-05-31 · TA获得超过354个赞
知道小有建树答主
回答量:441
采纳率:0%
帮助的人:0
展开全部
当你要显示流的内容时,系统会自动以默认的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
JoleW
2007-05-22 · TA获得超过166个赞
知道小有建树答主
回答量:269
采纳率:0%
帮助的人:161万
展开全部
ASCIIEncoding ascii = new ASCIIEncoding(); 生成一个解码的类对象,该类目的是一个编码字节序列转换为一组 Unicode 字符
ascii.GetBytes(str1);将str1所有unicode字符编码为一个字节序列
ascii.GetBytes(str2);将str2所有unicode字符编码为一个字节序列
并且将字节序列存入字节数组,最后将其输出。
所以最后结果因该是字节输出,中文输不出来,只能输出西文。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
so_fat
2007-05-30 · 超过17用户采纳过TA的回答
知道答主
回答量:40
采纳率:0%
帮助的人:0
展开全部

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。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友8d249d90
2007-06-03 · TA获得超过106个赞
知道小有建树答主
回答量:237
采纳率:0%
帮助的人:0
展开全部
ASCII没有中文的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式