LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 870|回复: 3

关于:printf("汉字 \n"); 实现机理;

[复制链接]
发表于 2005-4-13 14:10:59 | 显示全部楼层 |阅读模式
在gcc/vs2003都可以运行,utf8 源文件


这是 C库支持吗?
字符串如何编码的?
发表于 2005-4-13 19:41:34 | 显示全部楼层
locale = GB2312/GB18030/GBK

输入汉字"汉字"后转化为汉字对应的GB编码。比如是0xa1 0xb2 0xa2 0xb3
因此字符串"汉字"转化为{0xa1, 0xb2, 0xa2, 0xb3},

显示的时候根据locale将{0xa1, 0xb2, 0xa3, 0xb4}具体解码为(locale)对应的字符。

GB时>0xa1认为时, eg:
  0x20, 0x36, 0xa1, 0xb2, 0xa2, 0xb3, 0x38, 0x20
==> ' ', '6', '汉'(2 byte), '字'(2byte), '8', ' ',
     注意0xa1 0xb2, 0xa2 0xb3 并不对应"汉字"的GB编码。
汉字进行GB解码,index = 0xa1|0xa2, GBIndexToUnicode可转换为Unicode码。

UTF8稍微复杂,不过任何编码本质都是相似的。

因此能直接printf出汉字仅仅因为显示终端的locale对应的GBxxx编码。
如果locale不是GBxxx,则显示未其他编码对应的字符。

关于多种编码及相互转换可以参考libiconv,里面非常全面。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-4-13 23:16:37 | 显示全部楼层

感谢楼上的大虾,还想请教一下,如何设字符编码

setlocale()
可以吗?

gedit自动探测编码,不知是如何实现的?

wchar_t    在linux对应utf8 编码吗?
4字节!!!

unicode 和代码页有什么关系???
回复 支持 反对

使用道具 举报

发表于 2005-4-14 01:08:26 | 显示全部楼层
能不能给出一段示例的代码?
编译进程序的汉字printf输出是乱码,但从终端输入的汉字能正确输出。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表