控制台输出UTF-8编码的字符串这要系统支持吧。。比如中文版Windows默认一般默认是GB系列编码
一定要输出的话转换成GBK之类的再输出吧。。或者至少转换成UCS-2编码再输出吧 |
|
可是为什么 当我的VS输出中文的时候(中文不是来自网页就是简单的printf(“中文”);)显示乱码,然后当我设置了UFT-8就OK了呢??
|
|
socket你设置是以stream形式的吧。那么就是字节流,需要相同的编码形式
|
|
10分 |
ConvertUtf8ToGBK(CString& strUtf8) len = WideCharToMultiByte(CP_ACP, 0, wszGBK, -1, NULL, 0, NULL, NULL); |
10分 |
接收到的数据保存成文件打开后就正常,这说明传输是没问问题了。主要是这里有好几个问题没搞清:
1.这里不知道楼主是什么系统,用的什么编译环境。这里假设是Windows和VC吧、 2.发送端发送的是什么编码?按照你说是UTF-8,这没问题。我猜测你传输的可能是UTF-8编码的htm文件。 3.程序看到是乱码,是如何看的?是通过调试还是通过打印。如果你用的是VC,那么VC无论是调试还是打印都不支持UTF-8,只支持GBK(这么说其实不准确,可以粗浅这么认为)。如果网络数据本身是UTF-8,那么如果要在程序中输出,请转换一下编码后printf,用4楼的API就可以,也可以用开源库。 3.至于printf(“中文”)显示是乱码,取决于你承载这句话的源文件是什么编码。对于编译器来说只是输出的两个引号之间的东西,里面是什么就是什么。如果是VC,可能会做得多一些。如果原文件是用GB码保存的,输出一般没问题。如果源文件是用加了BOM头的UTF-8保存的,编译器其实会自动把UTF-8转码为本地码,也没问题。如果没有BOM头的UTF-8,这时候编译器无法识别UTF-8,就无法转码,那么可能就会有问题 4.你把接收到了内容保存成文件,打开又没乱码,这说明你网络编程没问题。因为只要是二进制传输,网络这里其实就是原样拷贝而已,原来是啥就是啥。打开的时候,你的记事本或者文本工具会自动识别,自认没乱码了。 |
不知道有多少前人掉在TCP Socket
send(人多)send(病少)send(财富) recv(人多病)recv(少财富) 陷阱里面啊! http://bbs.csdn.net/topics/380167545 |