pananning 发表于 2025-6-3 23:53

来个大佬解释一下string,wstring,chat16_t等等到底什么区别

关于字符串的这些类型搞晕了,string能不能存储中文字符串,什么时候用什么类型合适,来个大佬讲讲这些类型以及编码之间的关系

m_h 发表于 2025-6-4 00:05

本帖最后由 m_h 于 2025-6-4 00:19 编辑

utf 系列(众多国家在一个表)ansi 系列(中文GB啥的,其他国家等等各有不同的表    表的起点一样 终点不一样如果 用洋文问世打开中文就乱码这种)。
多字节表示一个字   ,单字节表示一个字,单 多 混合存在表示一到两个字。

你好,再见 发表于 2025-6-4 00:35

string一个字符一字节,wstring一个字符两字节。
string可以存中文,正常情况下按照gbk2312解码是正常的,但是如果string里面混入了特殊字符就会解码异常。
2字节+2字节+3字节+2字节,解码为2字节+2字节+2字节+2字节+1字节就出错了
wstring 2字节+2字节+3字节+2字节,解码为2字节+2字节+2字节+2字节+2字节,特殊字符不影响后续中文显示。

BrutusScipio 发表于 2025-6-4 04:45

反复问AI解答不就行了
看起来应该是C 和 C++ 那么不同运行时环境下定义也不一样 C11 C20定义又不一样
那么没有需求就用最新标准与实现就行了 Windows内核用UTF16如果不考虑跨平台用那个宏加在字符串前面就行了

feitianshenyu 发表于 2025-6-4 08:45

你可以认为string和wstring都是一个容器,string里的每个元素都是8bit, wstring里面都是16bit。至于容器用来装什么东西,都无所谓。只要能放进去,取出来就行。
只要是容器都是能存储中文,你按GB2312编码,形成字节流,就能写入到string中,读出字节流,按照GB2312解码就能读取中文。
char16_t是单独的语义上的一个基础类型,表示一个utf16编码的元素。与wchar_t字节上类似,但是有编码上的约束。

DQQQQQ 发表于 2025-6-4 11:37

string,wstring 那应该是C++了。 字符串处理,有两种方式。一个种是指针规定一个特别字符作为结尾,如C语言的\0, 一种是指针+长度,如C++。
C++标准委员会,并没有规定string,wstring,使用什么编码。只是规定了,前者多字节,后者宽字节。在windows上面, 前者字符类型是char, 后者是wchar(俩字节).但是在Linux和MAC上面后者UINT32(四字节).因为没有规定具体多少编码类型。所以string在windows使用的ansi, Linux使用的Utf8.据说C++标准委员会,觉得固定编码很蠢,所以拒绝规定。
因为string,wstring采用的指针+长度,且没有规定编码。这就让string,使可以处理二进制数据。所以可以使用string才做缓存传递数据(我就喜欢这么写代码,不考虑内存管理)。
页: [1]
查看完整版本: 来个大佬解释一下string,wstring,chat16_t等等到底什么区别