如何输出utf-8格式的字符串

时间:2022-06-01 19:04:18
本人新手
最近刚搞编码问题。

比如我把一个含有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不行。

#2


输出到dos中 
比如我有一个string stemp中储存了7个汉字的utf-8编码
如果在dos中输出这7个汉字呢
cout<<stemp的话 只会输出21个框,而不是7个汉字

#3


MultiByteToWideChar
WideCharToMultiByte
编码的转换

#4


在运行你的程序输出UTF-8之前,先用下面的命令切换代码页。
chcp  65001

#5


已经都设置过了,但还是不行。
转码都试过了,用type 的dos命令是可以正常输出utf-8文本的
但是无法正常输出字符串的文本,已经是utf-8的代码页了。
哎,实在不行就算了。
反正只是偶尔突发奇想。
十分感谢大家的帮助!

#6


引用 5 楼  的回复:
已经都设置过了,但还是不行。
转码都试过了,用type 的dos命令是可以正常输出utf-8文本的
但是无法正常输出字符串的文本,已经是utf-8的代码页了。
哎,实在不行就算了。
反正只是偶尔突发奇想。
十分感谢大家的帮助!


但是无法正常输出字符串的文本,已经是utf-8的代码页了。
写错了
想说的是无法输出字符串,不是文本,
就算dos已经是utf-8的代码页,字符串还是不能正常输出。

#1


输出到哪里?

而且一般Windows上,是要输出UNICODE16的。UTF8不行。

#2


输出到dos中 
比如我有一个string stemp中储存了7个汉字的utf-8编码
如果在dos中输出这7个汉字呢
cout<<stemp的话 只会输出21个框,而不是7个汉字

#3


MultiByteToWideChar
WideCharToMultiByte
编码的转换

#4


在运行你的程序输出UTF-8之前,先用下面的命令切换代码页。
chcp  65001

#5


已经都设置过了,但还是不行。
转码都试过了,用type 的dos命令是可以正常输出utf-8文本的
但是无法正常输出字符串的文本,已经是utf-8的代码页了。
哎,实在不行就算了。
反正只是偶尔突发奇想。
十分感谢大家的帮助!

#6


引用 5 楼  的回复:
已经都设置过了,但还是不行。
转码都试过了,用type 的dos命令是可以正常输出utf-8文本的
但是无法正常输出字符串的文本,已经是utf-8的代码页了。
哎,实在不行就算了。
反正只是偶尔突发奇想。
十分感谢大家的帮助!


但是无法正常输出字符串的文本,已经是utf-8的代码页了。
写错了
想说的是无法输出字符串,不是文本,
就算dos已经是utf-8的代码页,字符串还是不能正常输出。