首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >(C++)。非unicode语言(简体中文)输入/输出

(C++)。非unicode语言(简体中文)输入/输出
EN

Stack Overflow用户
提问于 2015-09-08 01:33:59
回答 1查看 1.3K关注 0票数 0

我对编程很陌生,并且在我的C++教科书中做了一些例子。我能够完成大部分的例子,但当我尝试做以下工作时,出现了一些问题:试图在类似于"Hello!“的程序上显示汉字!

  1. 关于非unicode字符(如简体中文)的输入/输出问题,我想提供一些信息,说明我迄今所做的努力: 我在运行“你好世界!”代码程序:使用C++代码块,并试图将文本"Hello“替换为中文"你好”。我运行了这个程序,但是在命令提示符下,输出只是胡言乱语(乱码)。因此,我在网上搜索信息,发现我不得不把我的区域设置改为“简化,中国”。我做了这个,重新启动了我的电脑,并再次运行程序。这一次,程序的输出是非unicode字符,然而,它们是不正确的字符(这些:浣犲ソ锛),我也认为它也是日本的.互联网上的一些中文资源称它是"你好“的编码,但我不太确定。我只想让我写的文本(std::cout <<“-\n”)像我使用英语时那样正确显示。如何使它显示我在代码中所写的内容:命令提示符上的块?

最后,有一个提示弹出,说明由于我使用了非法字符,编码被更改.

EN

回答 1

Stack Overflow用户

发布于 2015-09-08 10:30:09

试过以下几点:

代码语言:javascript
复制
#include <iostream>

int main()
{
        std::cout << "你好" << std::endl;
        return 0;
}

我得到了输出:

代码语言:javascript
复制
你好

对我来说,这似乎是同一个角色(如果我没有看到你的不同之处,我会谦卑地道歉)。这使我认为问题在于一方面保存文件和/或编译时字符到字节的转换不匹配,另一方面执行过程中显示字节到字符的转换不匹配。

我的正确输出是在XUbuntu上使用g++ 4.8.4。cpp文件是用vim保存的,如下所示:

代码语言:javascript
复制
 00000000:  23 69 6e 63 6c 75 64 65  20 3c 69 6f 73 74 72 65  #include <iostre
 00000010:  61 6d 3e 0a 0a 69 6e 74  20 6d 61 69 6e 28 29 0a  am>..int main().
 00000020:  7b 0a 09 73 74 64 3a 3a  63 6f 75 74 20 3c 3c 20  {..std::cout << 
 00000030:  22 e4 bd a0 e5 a5 bd 22  20 3c 3c 20 73 74 64 3a  "......" << std:
 00000040:  3a 65 6e 64 6c 3b 0a 09  72 65 74 75 72 6e 20 30  :endl;..return 0
 00000050:  3b 0a 7d 0a -- -- -- --  -- -- -- -- -- -- -- --  ;.}.------------

如您所见,每个字符被保存为3字节的UTF-8序列(以粗体表示的编码位):

  • 0100 10111101 10100000 -字符77664
  • 0101 10100101 10111101 -字符22909

因为有一次你有4个字符的文本,我相信这些字节实际上被编译成UTF-8很好,但随后被读取为其他的东西。如果它们被读取为UTF-16,那将尝试生成3个字符(每个字符2个字节),但这不是一个可能的场景,因为标准的创建方式可以避免这种混淆,还因为您实际上得到了4个字符,而且UTF-16不可能使用较少的汉2字节来生成一个字符。

在这一点上,我必须说,我没有足够的信息试图帮助你进一步。请考虑提供您正试图编译的确切代码,如果可能的话,还可以提供它的十六进制表示。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32447997

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档