免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: sanor
打印 上一主题 下一主题

[C] 请教。关于汉字编码转换UTF-8->GB2312。 [复制链接]

论坛徽章:
0
21 [报告]
发表于 2008-06-12 09:49 |只看该作者
原帖由 sanor 于 2008-6-11 13:27 发表
大家有做过这个的实现吗?UTF-8到GB2312的转换。
linux汉字编码为UTF-8,汉字库编码为GB2312。所以需要UTF-8到GB2312的转换。
交叉工具链中没有iconv函数,所以需要自己实现。网上搜到的全都是windows下的不可 ...



一般的转换都是先知道字符集然后转成UNICODE再转成别的字符集....
这个说的是相同的字,如果简体和繁体转就不是这么转了,就需要一个另外的映射表....

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
22 [报告]
发表于 2008-06-12 10:19 |只看该作者
研究过windows的字符集转换工具就知道
unicode是字符集转换的重要桥梁
很关键的,如果某个同型汉字在CJK中都存在,那么对应的unicode是一个
(题外话:韩国曾经干过烂事,搞过不兼容的事情)

unicode针对的是形状,每个unicode对应一个字符图形
在/usr/share/i18n/charmaps里面的是219个字符集对unicode转换表

话说win2000的nls文件比redhat7.2的i18n文件少很多字符集,而且缺字严重
我现在用RHEL5,windows2000之后的系统没有用过
最新的字符映射表可以去www.unicode.org下载

LINUX方面,利用i18n的项目提供的现成字符映射表可以省掉很多麻烦
下面是i18n中GB2312的一段文本,这个文本还看不懂的,就不要搞字符集转换程序了

<code_set_name> GB2312
<mb_cur_max> 2
<mb_cur_min> 1
<comment_char> %
<escape_char> /
% Chinese charmap for EUC-CN = GB2312 = union of ASCII and GB_2312-80
% version: 1.0
% Contact: ha_shao
% Email: hashao@china.com
% Distribution and use is free, even for comercial purpose.
%
CHARMAP
<U0000>     /x00         NULL (NUL)
<U0001>     /x01         START OF HEADING (SOH)
<U0002>     /x02         START OF TEXT (STX)
<U0003>     /x03         END OF TEXT (ETX)
<U0004>     /x04         END OF TRANSMISSION (EOT)
<U0005>     /x05         ENQUIRY (ENQ)
<U0006>     /x06         ACKNOWLEDGE (ACK)
<U0007>     /x07         BELL (BEL)
<U0008>     /x08         BACKSPACE (BS)
<U0009>     /x09         CHARACTER TABULATION (HT)
<U000A>     /x0a         LINE FEED (LF)
...
<U8584>     /xb1/xa1     <CJK>
<U96F9>     /xb1/xa2     <CJK>
<U4FDD>     /xb1/xa3     <CJK>
<U5821>     /xb1/xa4     <CJK>
<U9971>     /xb1/xa5     <CJK>
<U5B9D>     /xb1/xa6     <CJK>
<U62B1>     /xb1/xa7     <CJK>
<U62A5>     /xb1/xa8     <CJK>
...
注意CHARMAP开始,就是映射关系,
三个字段分别表示:unicode编码, C语言char数组元素,注释
排列顺序是按照GB2312

论坛徽章:
0
23 [报告]
发表于 2008-06-13 09:36 |只看该作者
多谢大家热心相助。这个问题已经解决了。
期间我从unicode到gbk的映射表中摘出了gb2312的那部分做成另一个映射表。然后查表得到。
再次谢谢大家。
至于iconv源码,先让他闪边。。

论坛徽章:
0
24 [报告]
发表于 2008-06-30 17:03 |只看该作者
好,顶一下。

论坛徽章:
0
25 [报告]
发表于 2008-06-30 17:22 |只看该作者
为什么不用函数iconv?

论坛徽章:
0
26 [报告]
发表于 2008-06-30 23:27 |只看该作者
学这个东西好学吗,编程我是个外行,刚开始介入,代价多多指教,现在我去找个人,去学习,领入门以后自己研究,这样可以吗,认识更多的朋友 ,加QQ:375331406

论坛徽章:
0
27 [报告]
发表于 2008-07-01 09:59 |只看该作者
libiconv在windows下是能用的,我一直在用

论坛徽章:
0
28 [报告]
发表于 2008-07-08 10:13 |只看该作者
又学到了一些。收藏。

论坛徽章:
0
29 [报告]
发表于 2008-07-08 10:33 |只看该作者
只问一句 iconv 开发到 1.13  要是都象你们说的这么简单, 那些开发人员是不是弱智啊?

论坛徽章:
0
30 [报告]
发表于 2008-07-08 13:01 |只看该作者
原帖由 cugb_cat 于 2008-6-11 13:31 发表
把iconv的代码下载下来,抄一抄~~!

这种函数都是调用来调用去的。
如果LZ能耐心把iconv代码看透,估计连红尘也能看透了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP