免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 8244 | 回复: 24
打印 上一主题 下一主题

求助 linux中unicode字符集的问题~~~~~~~~~~~ [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-10-10 09:43 |只看该作者 |倒序浏览
代码只有一句话如下:
#include         <stdio.h>
#include         <string.h>
#include         <stdlib.h>
#include <locale.h>

main()
{
        wchar_t wsz[80] = L"中国123";
}

测试系统:FedoraCore5和redflag ws4.0
编译命令:gcc -c -o main.o -c -g  main.c
编译输出:error: converting to execution character set: Invalid or incomplete multibyte or wide character

原帖由 albcamus 于 2006-10-12 11:00 发表
C/C++中使用Unicode编码是不现实的, 因为Unicode不回避'\0'的出现, 而这恰恰是C/C++中字符串结束的标志。

Windows也是一样的, 有次在朋友机器上用UE转成Unicode, VC也编译不了


原帖由 cuicp 于 2006-10-12 13:21 发表



这个我不太明白,c和c++源代码不是Unicode的吧?
可是这个问题是不是不需要把源代码转换成Unicode,只要把字符串转换成Unicode的就可以吧?
不知道对不对,还请高人赐教!


这个说法我赞同!把源代码转换成UNICODE vc6是不认识了,可vc2005一样可以打开并且正常编译。

但是和我想表达的意思就不是一会事了,不知道斑竹有没有看过xmpp协议它要求xmpp的内容是UTF8变码的

如下:
11.5.  Character Encoding
Implementations MUST support the UTF-8 (RFC 3629 (Yergeau, F., “UTF-8, a transformation

format of ISO 10646,” November 2003.) [UTF‑8]) transformation of Universal Character Set
(ISO/IEC 10646-1 (International Organization for Standardization, “Information Technology - Univ

ersal Multiple-octet coded Character Set (UCS) - Amendment 2: UCS Transformation Format 8
(UTF-,” October 1996.) [UCS2]) characters, as required by RFC 2277 (Alvestrand, H., “IETF Policy

on Character Sets and Languages,” January 1998.) [CHARSET]. Implementations MUST NOT attempt to use any other encoding.


可是中文呢是用的ANSI编码(ASCII编码的GB扩展),问题就变成了怎么把ANSI编码转换成UTF-8编码
一般的做法是先把ANSI编码的字符串转换成UNICODE然后把UNICODE

采用UTF-8编码来存储(按照字符在unicode表中的位置转换)。



或者直接在写代码时就把字符串使用unicode来表示,
然后再把unicode字符串使用UTF-8编码来存储(按照字符在unicode表中的位置转换)。

等待高人指点~~~~~~~~~~~~

[ 本帖最后由 xiaoligang 于 2006-10-12 13:42 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2006-10-10 15:33 |只看该作者
现在的问题是怎么把

char ac[80] = "中国123";

中的 ac字符串转换成 UTF-8编码存储的字符串。

或者

wchar_t wsz[80] = L"中国123";

可以让编译器认识,然后再把这个wsz字符串(unicode字符集的)转换成使用UTF-8编码来存储。

[ 本帖最后由 xiaoligang 于 2006-10-12 13:47 编辑 ]

论坛徽章:
0
3 [报告]
发表于 2006-10-11 09:29 |只看该作者
问题还没解决等待高手给出解决方法,最好给出代码(应该不是很长)。

[ 本帖最后由 xiaoligang 于 2006-10-12 16:50 编辑 ]

论坛徽章:
0
4 [报告]
发表于 2006-10-11 15:14 |只看该作者
:em12::em12:不回答也要给我一个放弃的理由,大家不要只做看客!!!

[ 本帖最后由 xiaoligang 于 2006-10-13 09:26 编辑 ]

论坛徽章:
0
5 [报告]
发表于 2006-10-12 10:10 |只看该作者
有这么多人浏览,看来还是有很多人关心的,
希望哪位大虾给解释一下啊,接着顶。

论坛徽章:
0
6 [报告]
发表于 2006-10-12 11:00 |只看该作者
C/C++中使用Unicode编码是不现实的, 因为Unicode不回避'\0'的出现, 而这恰恰是C/C++中字符串结束的标志。

Windows也是一样的, 有次在朋友机器上用UE转成Unicode, VC也编译不了

论坛徽章:
0
7 [报告]
发表于 2006-10-12 11:01 |只看该作者
P.S. 如果想在Linux做国际化 , 最好使用GNU gettext

论坛徽章:
0
8 [报告]
发表于 2006-10-12 11:05 |只看该作者
原帖由 albcamus 于 2006-10-12 11:00 发表
C/C++中使用Unicode编码是不现实的, 因为Unicode不回避'\0'的出现, 而这恰恰是C/C++中字符串结束的标志。

Windows也是一样的, 有次在朋友机器上用UE转成Unicode, VC也编译不了


不对吧windows里用vc编译这几行代码没有任何问题啊。

论坛徽章:
0
9 [报告]
发表于 2006-10-12 11:09 |只看该作者
原帖由 xiaoligang 于 2006-10-12 11:05 发表


不对吧windows里用vc编译这几行代码没有任何问题啊。


那是因为不是Unicode吧? 你用UE把源代码转成Unicode试试看? 我试过的

论坛徽章:
0
10 [报告]
发表于 2006-10-12 13:21 |只看该作者
原帖由 albcamus 于 2006-10-12 11:09 发表


那是因为不是Unicode吧? 你用UE把源代码转成Unicode试试看? 我试过的



这个我不太明白,c和c++源代码不是Unicode的吧?
可是这个问题是不是不需要把源代码转换成Unicode,只要把字符串转换成Unicode的就可以吧?
不知道对不对,还请高人赐教!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP