高手们牛人们,关于字符编码转换原理的问题!我快崩溃了!!!

sxsxyswtx 2011-06-23 05:19:25
真诚的请教各位高手们牛人们,关于字符编码转换原理的问题!我快崩溃了!!!
首先,对看这个帖子的朋友表示感谢,我在一家手机设计公司做程序员,以下这些问题困扰了我很久,在网上查了很多资料在公司能问的人都问

了,但还是不明白,反而越来越糊涂了好像没有人对这些问题有深入的了解

希望能有高手用通俗易懂的语言不要用专业的词汇

1:在windowsXP中我们输入中文并看到这个过程是怎样的?我看了些资料说windows底层支持UNICODE,是不是windows先把我输入到记事本里的字

符转成UNICODE然后UNICODE再根据编码到字库中找到字模画出来?还是UNICODE调的是GB2312的接口去找字的??
2:我认为既然UNICODE 支持全世界所有的字的话,那还要GB2312干什么啊,每一个字都用UNICODE,直接找到那个字显示出来就行了啊?是这样的

吗?
3:在WINDOWS下在记事本或者WORD或者EXCEL中输入不管是ASCALL或者汉字他都是怎么编码的?都一样吗?都是UNICODE吗?
4:以上这些问题我觉得都是我对字符编码的知识不是很熟悉导致的,希望牛人能用我这种菜鸟理解的方法给我解释一下,比如我在WINDOWS下用搜狗输入汉字,我输入拼音,相应的汉字就显示在拼音上面了,这个过程是怎样的?是把拼音先转成UNICODE然后再根据UNICODE码找到汉字的字库吗?还是把拼音先转成UNICODE然后再根据UNICODE码找到GB2312的编码在找到相应的字库?
...全文
482 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
ryfdizuo 2011-06-28
  • 打赏
  • 举报
回复
恩,12楼说的比我好~
赵4老师 2011-06-28
  • 打赏
  • 举报
回复
推荐使用WinHex软件查看文件原始字节内容。
sxsxyswtx 2011-06-28
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 hzy694358 的回复:]
ANSI 汉字两个字节,字符一个字节
UNICODE 都占用两个字节
UFT8 汉字三个字节,字符一个字节

需不需要编码转换,就看你的工程使用的是什么编码格式
然后再看你操作的文本是什么编码,
相同就不需要转,不同就转,
easy吧
[/Quote]



你说的很对,我现在的问题就是不知道我用的是什么编码方式啊,操作的文本的编码怎么看啊,比如记事本,WORD,EXCEL,vc6,这些工具你怎么知道它用的是什么编码啊,都是默认的啊,我觉得这个就是我主要的问题所在啊,求高手们解答
luciferisnotsatan 2011-06-27
  • 打赏
  • 举报
回复
如果不用现成的库,那么,GB2312和unicode好像没有转换公式,只能自己建个表,查表找。
http://www.herongyang.com/gb2312_gb/ug_map_20.html
luciferisnotsatan 2011-06-27
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 zhao4zhong1 的回复:]

个别Unicode占3个字节
[/Quote]
常用的是ucs-2和ucs-4
windows下的wchar_t是ucs-2编码,2字节。
linux是ucs-4,4字节。
luciferisnotsatan 2011-06-27
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 majia2011 的回复:]

简单说几句

ansi,字符集,老外没考虑过计算机要给我们用
GB2312,我们自己搞得汉字字符集,反正大于127的也没人用,我就用个大于127的表示汉字
unicode,iso定的,你们一人搞一套,还不兼容,这可不行,都统一了,用这个宽字符集
utf8,编码规则,告诉对方,我给你发过来的是什么,可能是单字符,也可能是宽字符,好在我用的是utf8,是什么东西,你按规则解吧
[/Quote]
这个强
赵4老师 2011-06-27
  • 打赏
  • 举报
回复
个别Unicode占3个字节
hzy694358 2011-06-27
  • 打赏
  • 举报
回复
ANSI 汉字两个字节,字符一个字节
UNICODE 都占用两个字节
UFT8 汉字三个字节,字符一个字节

需不需要编码转换,就看你的工程使用的是什么编码格式
然后再看你操作的文本是什么编码,
相同就不需要转,不同就转,
easy吧
majia2011 2011-06-27
  • 打赏
  • 举报
回复
简单说几句

ansi,字符集,老外没考虑过计算机要给我们用
GB2312,我们自己搞得汉字字符集,反正大于127的也没人用,我就用个大于127的表示汉字
unicode,iso定的,你们一人搞一套,还不兼容,这可不行,都统一了,用这个宽字符集
utf8,编码规则,告诉对方,我给你发过来的是什么,可能是单字符,也可能是宽字符,好在我用的是utf8,是什么东西,你按规则解吧
赵4老师 2011-06-27
  • 打赏
  • 举报
回复
想彻底明白的话:

计算机组成原理→DOS命令→汇编语言→C语言(不包括C++)、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言(包括C++)、架构……

VC调试时按Alt+8,TC或BC用TD调试,打开汇编窗口看每句C对应的汇编并单步执行一遍不就啥都明白了吗。
(Linux或Unix下应该也可以在用GDB调试时,看每句C对应的汇编并单步执行。)
想要从本质上理解C指针,必须学习汇编以及C和汇编的对应关系。
从汇编的角度理解和学习C语言的指针,原本看似复杂的东西就会变得非常简单!
指针即地址。“地址又是啥?”“只能从汇编语言和计算机组成原理的角度去解释了。”

提醒:
“学习用汇编语言写程序”

“VC调试时按Alt+8,TC或BC用TD调试,打开汇编窗口看每句C对应的汇编并单步执行一遍。
(Linux或Unix下应该也可以在用GDB调试时,看每句C对应的汇编并单步执行。)
想要从本质上理解C指针,必须学习C和汇编的对应关系。”
不是一回事!

为什么要有数据结构这个东东?
因为要将现实世界或者抽象理论中的各种数据保存在计算机外存(光盘、硬盘、U盘……)或内存(ROM、RAM、SRAM……)里面的一维二进制字节数组中。
然后让CPU这个只会执行预先保存好的加减乘除移位条件转移……等机器指令的家伙按照人的意志去处理这些数据。

不要迷信书、考题、老师、回帖;
要迷信CPU、编译器、调试器、运行结果。

电脑中只有0和1,人脑中才有8个0和1组成的字节,多个字节拼合成一个数,某些数表示英文字母,某些数表示数字、标点符号、某些数表示彩色、打印机或显示屏上的点、表示某种语言某种字体中的某个字符第几笔在整个字符坐标范围内的坐标、表示三维空间中的某个点、表示围棋中的某一步、表示美女图片中的某个像素、表示新闻网站上的某句话……
sxsxyswtx 2011-06-27
  • 打赏
  • 举报
回复
哎,首先谢谢大家的帖子,但是还是没有一个帖子能让我明白,感觉懂这个的人太少了
pathuang68 2011-06-24
  • 打赏
  • 举报
回复
字符转换还是用iconv比较好。参考这个帖子:
http://topic.csdn.net/u/20110624/19/a9b8beb5-cb27-4be6-8a2c-4c94f0efdb76.html
中5楼的回答。
就想叫yoko 2011-06-24
  • 打赏
  • 举报
回复
ANSI 跟 GB2312 是个什么关系
UNICODE 跟 UTF8 是个什么关系
luciferisnotsatan 2011-06-24
  • 打赏
  • 举报
回复
1:在windowsXP中我们输入中文并看到这个过程是怎样的?我看了些资料说windows底层支持UNICODE,是不是windows先把我输入到记事本里的字
符转成UNICODE然后UNICODE再根据编码到字库中找到字模画出来?还是UNICODE调的是GB2312的接口去找字的??
记事本保存时,可以选编码。打开记事本,另存为,你可以看到编码选项

2:我认为既然UNICODE 支持全世界所有的字的话,那还要GB2312干什么啊,每一个字都用UNICODE,直接找到那个字显示出来就行了啊?是这样的吗?
大陆有普通话了,其它方言都该消灭么?


3:在WINDOWS下在记事本或者WORD或者EXCEL中输入不管是ASCALL或者汉字他都是怎么编码的?都一样吗?都是UNICODE吗?
默认通常都是ANSI编码。简体中文windows,ANSI对应的是GB2312

4:以上这些问题我觉得都是我对字符编码的知识不是很熟悉导致的,希望牛人能用我这种菜鸟理解的方法给我解释一下,比如我在WINDOWS下用搜狗输入汉字,我输入拼音,相应的汉字就显示在拼音上面了,这个过程是怎样的?是把拼音先转成UNICODE然后再根据UNICODE码找到汉字的字库吗?还是把拼音先转成UNICODE然后再根据UNICODE码找到GB2312的编码在找到相应的字库?
UNICODE转GB2312,简体中文windows系统,直接用库函数就行了。WideCharToMultiByte
就想叫yoko 2011-06-24
  • 打赏
  • 举报
回复
我还指着这个帖子学习呢。。。
可惜高手都不来。。
yuyan_linger 2011-06-24
  • 打赏
  • 举报
回复
3:在WINDOWS下在记事本或者WORD或者EXCEL中输入不管是ASCALL或者汉字他都是怎么编码的?都一样吗?都是UNICODE吗?
一般来说是一样的 ,看你的系统提供了几种字符集吧 ,如果有多种选择 工具可能会提供更多的让用户自己选,或者这些文档处理器就集成了几种字符集

4:以上这些问题我觉得都是我对字符编码的知识不是很熟悉导致的,希望牛人能用我这种菜鸟理解的方法给我解释一下,比如我在WINDOWS下用搜狗输入汉字,我输入拼音,相应的汉字就显示在拼音上面了,这个过程是怎样的?是把拼音先转成UNICODE然后再根据UNICODE码找到汉字的字库吗?还是把拼音先转成UNICODE然后再根据UNICODE码找到GB2312的编码在找到相应的字库?

搜狗应该有个自己的库哈希了拼音到汉字的映射,使得输入拼音就可以显示汉字,比如输入kai 就找k开头的库,然后找韵母为...的 ,如此等等,这应该是个算法的问题,和编码转换没什么关系,按回车确定以后就调用api的接口,把这个字的二进制写到io流中,这时候可能会采用某种比较通用的编码 具体是什么也不清楚
yuyan_linger 2011-06-24
  • 打赏
  • 举报
回复
1:在windowsXP中我们输入中文并看到这个过程是怎样的?我看了些资料说windows底层支持UNICODE,是不是windows先把我输入到记事本里的字

符转成UNICODE然后UNICODE再根据编码到字库中找到字模画出来?还是UNICODE调的是GB2312的接口去找字的??

记事本打开默认会有按照哪个字符集来存储的,比如是X字符集,“雨烟”这两个字对应的二进制是0xfe02a701和0xe4... 我就是举例哈 然后就在记事本中存了这些二进制

2:我认为既然UNICODE 支持全世界所有的字的话,那还要GB2312干什么啊,每一个字都用UNICODE,直接找到那个字显示出来就行了啊?是这样吗?

最开始因为一个字节不能表示英语外的文字,就扩展成2个字节,然后每个国家把自己的字做成一个编码 表示所有该国文字,但是如果一个文档既有日文又有中文 又有韩文 该用什么标准呢 这就有了unicode
Proteas 2011-06-23
  • 打赏
  • 举报
回复
1:在windowsXP中我们输入中文并看到这个过程是怎样的?
输入法:需要根据你输入的拼音,显示出供选择的汉字,然后将编码发给程序。这时,输入法会加载一款字体,选择一种字符集。
然后,程序接收到编码后,还要看看能不能显示这个编码,与加载的字体与字符集有关。

2:我认为既然UNICODE 支持全世界所有的字的话,那还要GB2312干什么啊,每一个字都用UNICODE,直接找到那个字显示出来就行了啊?是这样吗?
GB2312->GBK->GB18030是中文字符集。
Unicode 标准是后出来的,早些年要不是王选解决汉字显示问题,现在连汉字都显示不出来。

3:在WINDOWS下在记事本或者WORD或者EXCEL中输入不管是ASCALL或者汉字他都是怎么编码的?都一样吗?都是UNICODE吗?
一般是 GBK 编码。跟程序有关, Word 与 Excel 2007 都是 Unicode 编码,以 UTF-8 的形式存储的。

4:以上这些问题我觉得都是我对字符编码的知识不是很熟悉导致的,希望牛人能用我这种菜鸟理解的方法给我解释一下,比如我在WINDOWS下用搜狗输入汉字,我输入拼音,相应的汉字就显示在拼音上面了,这个过程是怎样的?是把拼音先转成UNICODE然后再根据UNICODE码找到汉字的字库吗?还是把拼音先转成UNICODE然后再根据UNICODE码找到GB2312的编码在找到相应的字库?
首先,搜狗使用了字体,不同的字体支持不同的字符集。
你输入拼音,输入法会根据拼音,找到一些字符,然后显示出来供你选择。
你选择后,输入法通过相关的消息,将字符编码发给应用,
应用负责显示编码为可见字符。
就想叫yoko 2011-06-23
  • 打赏
  • 举报
回复
我自己的理解是
中文太多 一个字节存不下 所以用两个字节存
但是怎么个对应关系就是编码解码格式定了
比如A格式用 0x00 0x00 保存 我 这个字
B格式用 0x11 0x11 来保存 我
那么解码的时候你也要用对应的格式来解
不然就解成其他东西了

很多文件中开头有一些字节是表明该文件的编码格式的

windows下很多地方都是使用UNICODE进行中文编解码 gb2312貌似是UNICODE的子集
linux大部分用 UTF-8 UTF-8貌似是ANSI的子集

其实这个问题也一直困惑我
说得不对希望高手指正及补充

24,855

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧