请教各位老哥,有没有讲字符编码与字符集的书籍推荐?

224 天前
 liuguangxuan

有关字符编码和字符集的概念,一直是云里雾里的,虽然知道一些 Ascii 、Unicode 、UTF-8 、GBK 、单字节、多字节、宽字符、char 、wchar_t 、string 、wstring 等知识,但是并不能完全将他们串起来,特别是涉及到他们之间进行转换的时候,一旦在项目中,碰到乱码的问题,就觉得无从下手。

请各位有经验的老哥推荐一些这方面的书籍。如果书中有 C/C++示例就更棒了。

1800 次点击
所在节点    程序员
36 条回复
jiaqizhang
224 天前
《编码》?
Noicdi
224 天前
Noicdi
224 天前
AlanStar
224 天前
你在国内做东西的话知道 UTF-8 ,GBK 什么的就够了,不用知道太多,字符编码这个东西本质上就是用一套编码体系来映射文字和符号。
看 OP 的描述应该是做 C/CPP 开发的,我是做嵌入式开发的,建议你还是能不用中文输出就不用,对嵌入式设备来说输出中文有点浪费资源,print 也就是提示使用者程序的运行进度而已,也不必要必须是中文。

如果你必须这么做的话,有几个建议:
1.你可以用支持 Unicode 字符集的编译器(GCC/Clang)之类,但是需要在编译过程中加选项才可以。
2.可以在对应文件首部添加 // -*- coding: utf-8 -*- 来声明文件使用 UTF-8 编码。
3.也有在运行前在终端上执行 chcp 65001 这个命令的,我自己有试过但是好像不太尽人意。
4.可以引入宽字符集<wchar.h>,这条在网上搜到的,我没用过,OP 可以自己查查。
windliang
224 天前
hxy2856
224 天前
@AlanStar 老哥 插个楼问一问 嵌入式最近是不是需求量很大?什么原因啊,我看 8 月份招聘量挺高的 https://www.jobui.com/trends/quanguo-qianrushi/
AlanStar
224 天前
@hxy2856 这个我还真不太清楚,我觉得应该是和国家宏观战略有关,做芯片搭边的产业可能会有额外补贴。
AlanStar
224 天前
@hxy2856 我现在在做大数据开发,主要是学校不好我现在实习都不敢找嵌入式这种起点高的。
Jakarta
224 天前
@Noicdi #2 我的收藏夹里也是这篇文章😂
iOCZ
224 天前
字符集是一个字符对应哪个整数,编码是怎么存这个整数,这个整数可能会很大,需要多个字节来存。说白了,就这么回事。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/
ysc3839
224 天前
字符集: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 字节。
hxy2856
224 天前
@AlanStar 感谢~ 猜是政策问题
liuguangxuan
224 天前
@jiaqizhang 感谢老哥推荐好书,收藏了。
大致看了一下目录,感觉这本应该偏计算机组成原理。
iX8NEGGn
224 天前
正打算写,从 19 年到现在,我看了上千个网页,几十本包括 Unicode 、ISO/IEC 、中国的 GB 系列在内的 PDF 文档,写了二十多万字的笔记,正在重新整理安排如何由浅入深的介绍。

看得越多越发现我可能永远也学不会字符编码了,因为要精通全世界各国语言才能明白它为什么这么设计,以及一些早期的文档已经找不到,但我还是有很大的把握能写出一篇全网讲得较为明白的长文或书。

顺便问下,由于有的地方需要一些佐证,有没有好心人能借用 ISO/IEC 会员,我想把历年来所有 ISO/IEC 字符编码标准下载下来。
xmuli
224 天前
此两篇应该足够,① 详细讨论分析,②工作快速对照。
从起因分析,到 C++ 在 MSVC / MinGW 下的代码验证。甚是符合题主的提问。

①极繁根因分析 --> 愿编程不再乱码(含 Qt)-根因深究 [★★★★★] https://ifmet.cn/posts/c0862e62

②极简图表解释 --> 古文码、口字码、符号码、问号码、棍拷码 [★★★★★]
https://blog.csdn.net/qq_33154343/article/details/99617767

且若是额外有兴趣可看 Github QtExamples 的第六章
dandycheung
224 天前
好多好多年前,有一篇《字节那些事儿》: https://blog.csdn.net/dandycheung/article/details/5881620
cnbatch
224 天前
自己手动转换基本上不可能,等于重新造一个 ICU (International Components for Unicode),不如直接调库吧
12345tiger
224 天前
@hxy2856 可能是国产仪器需求带动的。现在大力提倡科学仪器国产化,从几十块的小设备到几百上千万的核磁、质谱,所有都优先采购国产,这需求不就一下子出来了吗
hxy2856
224 天前
@12345tiger 应该就是这个原因
vaaagle
224 天前

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/977583

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX