最近刚搞编码问题。
比如我把一个含有7个汉字的文本文件以utf-8格式保存
如果我在dos下 设置utf-8代码页和正确字体后 用type 指令 是能够正确输出的
但是如果我在cpp中用一个string读取其中一行代码。去除文本bom后,在用cout输出到dos中 却是很多个框
utf-8中汉字占3字节,但是却输出了21个框,说明程序还是没办法以utf-8格式 输出这段字符串 还以为输入的不是7个汉字,是21个字符。
所以小弟想问,如果我的string保存了一段utf-8格式的字符串,如何正确输出到屏幕上,正确输出7个汉字,不是乱码呢?
6 个解决方案
#1
输出到哪里?
而且一般Windows上,是要输出UNICODE16的。UTF8不行。
而且一般Windows上,是要输出UNICODE16的。UTF8不行。
#2
输出到dos中
比如我有一个string stemp中储存了7个汉字的utf-8编码
如果在dos中输出这7个汉字呢
cout<<stemp的话 只会输出21个框,而不是7个汉字
比如我有一个string stemp中储存了7个汉字的utf-8编码
如果在dos中输出这7个汉字呢
cout<<stemp的话 只会输出21个框,而不是7个汉字
#3
MultiByteToWideChar
WideCharToMultiByte
编码的转换
WideCharToMultiByte
编码的转换
#4
在运行你的程序输出UTF-8之前,先用下面的命令切换代码页。
chcp 65001
chcp 65001
#5
已经都设置过了,但还是不行。
转码都试过了,用type 的dos命令是可以正常输出utf-8文本的
但是无法正常输出字符串的文本,已经是utf-8的代码页了。
哎,实在不行就算了。
反正只是偶尔突发奇想。
十分感谢大家的帮助!
转码都试过了,用type 的dos命令是可以正常输出utf-8文本的
但是无法正常输出字符串的文本,已经是utf-8的代码页了。
哎,实在不行就算了。
反正只是偶尔突发奇想。
十分感谢大家的帮助!
#6
但是无法正常输出字符串的文本,已经是utf-8的代码页了。
写错了
想说的是无法输出字符串,不是文本,
就算dos已经是utf-8的代码页,字符串还是不能正常输出。
#1
输出到哪里?
而且一般Windows上,是要输出UNICODE16的。UTF8不行。
而且一般Windows上,是要输出UNICODE16的。UTF8不行。
#2
输出到dos中
比如我有一个string stemp中储存了7个汉字的utf-8编码
如果在dos中输出这7个汉字呢
cout<<stemp的话 只会输出21个框,而不是7个汉字
比如我有一个string stemp中储存了7个汉字的utf-8编码
如果在dos中输出这7个汉字呢
cout<<stemp的话 只会输出21个框,而不是7个汉字
#3
MultiByteToWideChar
WideCharToMultiByte
编码的转换
WideCharToMultiByte
编码的转换
#4
在运行你的程序输出UTF-8之前,先用下面的命令切换代码页。
chcp 65001
chcp 65001
#5
已经都设置过了,但还是不行。
转码都试过了,用type 的dos命令是可以正常输出utf-8文本的
但是无法正常输出字符串的文本,已经是utf-8的代码页了。
哎,实在不行就算了。
反正只是偶尔突发奇想。
十分感谢大家的帮助!
转码都试过了,用type 的dos命令是可以正常输出utf-8文本的
但是无法正常输出字符串的文本,已经是utf-8的代码页了。
哎,实在不行就算了。
反正只是偶尔突发奇想。
十分感谢大家的帮助!
#6
但是无法正常输出字符串的文本,已经是utf-8的代码页了。
写错了
想说的是无法输出字符串,不是文本,
就算dos已经是utf-8的代码页,字符串还是不能正常输出。