有关字符编码和字符集的概念,一直是云里雾里的,虽然知道一些 Ascii 、Unicode 、UTF-8 、GBK 、单字节、多字节、宽字符、char 、wchar_t 、string 、wstring 等知识,但是并不能完全将他们串起来,特别是涉及到他们之间进行转换的时候,一旦在项目中,碰到乱码的问题,就觉得无从下手。
请各位有经验的老哥推荐一些这方面的书籍。如果书中有 C/C++示例就更棒了。
1
IsuYww83LvR48EaC 2023-09-27 15:06:39 +08:00
《编码》?
|
2
Noicdi 2023-09-27 15:08:47 +08:00 via iPhone 3
|
3
Noicdi 2023-09-27 15:09:37 +08:00 via iPhone 2
|
4
AlanStar 2023-09-27 17:22:04 +08:00
你在国内做东西的话知道 UTF-8 ,GBK 什么的就够了,不用知道太多,字符编码这个东西本质上就是用一套编码体系来映射文字和符号。
看 OP 的描述应该是做 C/CPP 开发的,我是做嵌入式开发的,建议你还是能不用中文输出就不用,对嵌入式设备来说输出中文有点浪费资源,print 也就是提示使用者程序的运行进度而已,也不必要必须是中文。 如果你必须这么做的话,有几个建议: 1.你可以用支持 Unicode 字符集的编译器(GCC/Clang)之类,但是需要在编译过程中加选项才可以。 2.可以在对应文件首部添加 // -*- coding: utf-8 -*- 来声明文件使用 UTF-8 编码。 3.也有在运行前在终端上执行 chcp 65001 这个命令的,我自己有试过但是好像不太尽人意。 4.可以引入宽字符集<wchar.h>,这条在网上搜到的,我没用过,OP 可以自己查查。 |
5
windliang 2023-09-27 17:26:02 +08:00 via Android 1
|
6
hxy2856 2023-09-27 17:26:13 +08:00
@AlanStar 老哥 插个楼问一问 嵌入式最近是不是需求量很大?什么原因啊,我看 8 月份招聘量挺高的 https://www.jobui.com/trends/quanguo-qianrushi/
|
10
iOCZ 2023-09-27 17:35:06 +08:00 1
字符集是一个字符对应哪个整数,编码是怎么存这个整数,这个整数可能会很大,需要多个字节来存。说白了,就这么回事。https://liyucang-git.github.io/2019/06/17/%E5%BD%BB%E5%BA%95%E5%BC%84%E6%87%82Unicode%E7%BC%96%E7%A0%81/
|
11
ysc3839 2023-09-27 17:48:05 +08:00 via Android
字符集:ASCII Unicode GBK(没看过标准文档,不确定 GBK 是不是字符集和编码一起规定了)
因为目前绝大多数计算机内部存储、处理的是二进制数值,所以要给不同的字符编上序号,所有编好号的字符组成字符集。 字符编码(字符对应的整数在计算机内的二进制编码方案):UTF-8 UTF-16 GBK 7bitASCII 计算机处理二进制数据时是有一定限制的,比如有位长度限制(16bit, 32bit 等),有存储器最小访问长度限制(byte bits ,单字节位长度,目前主流计算机是 8bit),所以要根据不同限制,把字符序号转换成计算机能处理的数据。比如 7bit ASCII 是用于 byte bits>=7 的计算机,一个字符使用且最多使用一个字节,属于单字符单字节的编码方案。UTF-8 则是单字符多字节。 char:应该是 C/C++语言的概念,是一个主要用于表示字符的整数类型,一般来说长度是 1 字节。 宽字符、wide char 、wchar_t:应该也是 C/C++语言的概念,一般是能存储 Unicode 字符的整数类型,一般来说长度是 2 或 4 字节。 |
13
liuguangxuan OP @jiaqizhang 感谢老哥推荐好书,收藏了。
大致看了一下目录,感觉这本应该偏计算机组成原理。 |
14
iX8NEGGn 2023-09-27 19:58:45 +08:00 1
正打算写,从 19 年到现在,我看了上千个网页,几十本包括 Unicode 、ISO/IEC 、中国的 GB 系列在内的 PDF 文档,写了二十多万字的笔记,正在重新整理安排如何由浅入深的介绍。
看得越多越发现我可能永远也学不会字符编码了,因为要精通全世界各国语言才能明白它为什么这么设计,以及一些早期的文档已经找不到,但我还是有很大的把握能写出一篇全网讲得较为明白的长文或书。 顺便问下,由于有的地方需要一些佐证,有没有好心人能借用 ISO/IEC 会员,我想把历年来所有 ISO/IEC 字符编码标准下载下来。 |
15
xmuli 2023-09-27 23:28:30 +08:00 1
此两篇应该足够,① 详细讨论分析,②工作快速对照。
从起因分析,到 C++ 在 MSVC / MinGW 下的代码验证。甚是符合题主的提问。 ①极繁根因分析 --> 愿编程不再乱码(含 Qt)-根因深究 [★★★★★] https://ifmet.cn/posts/c0862e62 ②极简图表解释 --> 古文码、口字码、符号码、问号码、棍拷码 [★★★★★] https://blog.csdn.net/qq_33154343/article/details/99617767 且若是额外有兴趣可看 Github QtExamples 的第六章 |
16
dandycheung 2023-09-28 00:00:05 +08:00 via Android
好多好多年前,有一篇《字节那些事儿》: https://blog.csdn.net/dandycheung/article/details/5881620
|
17
cnbatch 2023-09-28 01:15:51 +08:00 1
自己手动转换基本上不可能,等于重新造一个 ICU (International Components for Unicode),不如直接调库吧
|
18
12345tiger 2023-09-28 02:16:23 +08:00 via Android
@hxy2856 可能是国产仪器需求带动的。现在大力提倡科学仪器国产化,从几十块的小设备到几百上千万的核磁、质谱,所有都优先采购国产,这需求不就一下子出来了吗
|
19
hxy2856 2023-09-28 08:51:14 +08:00
@12345tiger 应该就是这个原因
|
20
vaaagle 2023-09-28 09:32:10 +08:00
|
21
SmiteChow 2023-09-28 10:37:13 +08:00
其实就是两个概念,理解了就没什么了。
|
22
hxysnail 2023-09-28 11:05:01 +08:00 1
我之前写过一篇博客,可以参考一下: https://fasionchan.com/posts/coding/
|
23
koebehshian 2023-09-28 11:05:07 +08:00
维基百科看看就行了,配合 hexdump 一下
|
24
Feedmo 2023-09-28 12:26:30 +08:00
unicode explained
|
25
karott7 2023-09-28 13:30:35 +08:00
直接维基百科看
|
26
yelog 2023-09-28 13:46:22 +08:00 1
|
27
weeei 2023-09-30 17:14:47 +08:00
如果是 Windows 使用 VS 开发,需要注意,源文件使用的编码是跟随当前操作系统的,比如你用简体中文版本,源文件里面的字符串字面量就是 GB1080 ,如果用了繁体字面量在台湾版本的 Windows 下显示是不正常的,这里的原因就需要继续了解文字编码和语言字体的关系了。
|
28
weeei 2023-09-30 17:17:19 +08:00 1
另外 UTF-8 、UTF-16 和 UTF-32 不是 32 > 16 > 8 的关系,UTF-16 是个有缺陷的编码方式,不能表示全部字符集。只有 UTF-8 和 UTF-32 可以。只要记住结论 UTF-8 最牛逼就行了。
|
29
liuguangxuan OP @Feedmo #24 请问一下老哥,《 Unicode Explained 》这本书有中文版吗?
|
30
liuguangxuan OP @dandycheung #16 感谢老哥,这篇博文主要讲述的是字节,我想了解的是编码。不过还是谢谢~
|
31
liuguangxuan OP @xmuli #15 老哥,你给推荐的博文特别棒,正是我所需要的,非常感谢老哥。
还有此类高质量的博文吗?麻烦再给推荐一些吧,如果有此方面的书籍,就更棒啦~ |
32
liuguangxuan OP @iX8NEGGn #14 老哥写了之后麻烦通知一下啊,等着拜读您的著作。
另外可否推荐几篇您读过的一些高质量的博文?如果有这方面的书籍就更棒啦~ |
33
liuguangxuan OP @Noicdi #3 感谢老哥推荐的好文章,都一一看完了。老哥还有推荐的类似的高质量文章吗?书籍也可以哈。
|
34
xmuli 2023-10-06 22:25:59 +08:00
@liuguangxuan https://github.com/XMuli/QtExamples 乱码和编码部分属于第六章; 部分写的比较早期,希望可以帮助到你
|
35
Noicdi 2023-10-07 05:44:18 +08:00 1
@liuguangxuan #33 我当时也是工作上碰到了字符编码相关的问题,找到了这两篇文章大概看了一下,手上也没有类似的文章了。但是感觉可以在楼主的评论区里学到好多啊哈哈哈。感谢楼主的问题和各位老哥的回复。
|
36
Feedmo 2023-10-07 10:47:57 +08:00
@liuguangxuan 中文版我没找着,技术书的英文大多都没那么难读懂的
|