常见问题常见问题   搜索搜索   会员列表会员列表   团队团队   注册注册    个人资料个人资料   登录查看您的站内信件登录查看您的站内信件   登录登录 

converting to execution character set 是什么错误啊.

 
发表新文章   这个论题已经被锁定,您不能发表、回复或者编辑文章。    FreeBSD China -> 编程天地
阅读上一个主题 :: 阅读下一个主题  
作者 留言
七七
半仙


注册时间: 2007-01-17
文章: 8

文章发表于: Sun 2007-02-04 17:45:08    发表主题: converting to execution character set 是什么错误啊. 引用并回复

代码:

#include <locale>
#include <stdio>
#include <wchar>

int main(void){
  wchar_t *wc;
  wchar_t *ws = L"中文/Chinese";

   /*
  if(setlocale(LC_ALL, "zh_CN.UTF-8") == NULL){
    perror("set local failed");
    return 1;
  }*/
  setlocale(LC_ALL, "");

  wprintf(L"%ls\n\n", ws);

  for(wc = ws; *wc != 0; ++wc){
    wprintf(L"%lc\n", *wc);
  }

  return 0;
}


编译的时候老是这个错误converting to execution character set: Illegal byte sequence.
gcc version 3.4.4 [FreeBSD] 20050518
FreeBSD 6.0-RELEASE

在win下的gcc 编译的时候加上-finput-charset=GB2312就正常了.

在FreeBSD下加上-finput-charset=GB2312就出现一大堆错误.请大家帮我看看.

d1# gcc -pipe -W -Wall -Wstrict-prototypes -g -std=c99 -o str_replace str_replace.c
str_replace.c:7:17: converting to execution character set: Illegal byte sequence
d1# gcc -pipe -W -Wall -Wstrict-prototypes -g -std=c99 -finput-charset=GB2312 -o str_replace str_replace.c
cc1: no iconv implementation, cannot convert from GB2312 to UTF-8
str_replace.c:1:20: no iconv implementation, cannot convert from GB2312 to UTF-8
In file included from str_replace.c:1:
/usr/include/locale.h:40:23: no iconv implementation, cannot convert from GB2312 to UTF-8
/usr/include/locale.h:79:23: no iconv implementation, cannot convert from GB2312 to UTF-8
str_replace.c:2:19: no iconv implementation, cannot convert from GB2312 to UTF-8
In file included from str_replace.c:2:
/usr/include/stdio.h:45:24: no iconv implementation, cannot convert from GB2312 to UTF-8
In file included from /usr/include/stdio.h:45,
from str_replace.c:2:
/usr/include/sys/_types.h:33:28: no iconv implementation, cannot convert from GB2312 to UTF-8
str_replace.c:3:19: no iconv implementation, cannot convert from GB2312 to UTF-8
In file included from str_replace.c:3:
/usr/include/wchar.h:73:29: no iconv implementation, cannot convert from GB2312 to UTF-8
/usr/include/wchar.h:74:20: no iconv implementation, cannot convert from GB2312 to UTF-8
In file included from /usr/include/wchar.h:74,
from str_replace.c:3:
/usr/include/_ctype.h:96:22: no iconv implementation, cannot convert from GB2312 to UTF-8
str_replace.c:7:17: converting to execution character set: Illegal byte sequence
返回页首
阅览会员资料 发送站内信件
orzdummy
老妖


注册时间: 2007-01-27
文章: 1406

文章发表于: Sun 2007-02-04 19:45:59    发表主题: 引用并回复

这个大概是因为你的source character set和你的文件中的character set不一致。
返回页首
阅览会员资料 发送站内信件
orzdummy
老妖


注册时间: 2007-01-27
文章: 1406

文章发表于: Sun 2007-02-04 19:58:13    发表主题: 引用并回复

你把整个文本粘贴到vim里面,重新保存,最好存成utf-8的(我的locale都是utf-8的),然后直接编译,可以通过。
返回页首
阅览会员资料 发送站内信件
七七
半仙


注册时间: 2007-01-17
文章: 8

文章发表于: Sun 2007-02-04 20:36:18    发表主题: 引用并回复

把程序文件设置为UTF8,编译正常通过了.
但是运行的时候,中文显示还是乱码.英文倒是没错.
我已经setenv LC_ALL zh_CN.UTF-8了.
还需要设置什么?
返回页首
阅览会员资料 发送站内信件
orzdummy
老妖


注册时间: 2007-01-27
文章: 1406

文章发表于: Mon 2007-02-05 09:00:09    发表主题: 引用并回复

七七 写到:
把程序文件设置为UTF8,编译正常通过了.
但是运行的时候,中文显示还是乱码.英文倒是没错.
我已经setenv LC_ALL zh_CN.UTF-8了.
还需要设置什么?

嗯?难道是rp?不应该阿,我的6.1啥毛病都没有,最后就是把那个东西顺序打印出来,一个一行啊

你是不是在console下面?换X里面去看看?
返回页首
阅览会员资料 发送站内信件
七七
半仙


注册时间: 2007-01-17
文章: 8

文章发表于: Mon 2007-02-05 10:39:48    发表主题: 引用并回复

这就是传�h中的 RPWT .
我 也郁闷了.
我就是用 SSH secure Shell 远程登录到FreeBSD 的.
没有x-windows环境.
这一句写了setlocale(LC_ALL, "zh_CN.UTF-8") 出现乱码
换成这样setlocale(LC_ALL, "")中文就不显示,显示的是英文.
郁闷郁闷郁闷啊
返回页首
阅览会员资料 发送站内信件
orzdummy
老妖


注册时间: 2007-01-27
文章: 1406

文章发表于: Mon 2007-02-05 22:19:19    发表主题: 引用并回复

七七 写到:
这就是传�h中的 RPWT .
我 也郁闷了.
我就是用 SSH secure Shell 远程登录到FreeBSD 的.
没有x-windows环境.
这一句写了setlocale(LC_ALL, "zh_CN.UTF-8") 出现乱码
换成这样setlocale(LC_ALL, "")中文就不显示,显示的是英文.
郁闷郁闷郁闷啊

你用什么ssh client?不是putty吧?
返回页首
阅览会员资料 发送站内信件
snnn
道士


注册时间: 2005-11-21
文章: 606
来自: 北京

文章发表于: Tue 2007-02-06 09:15:21    发表主题: 引用并回复

C/C++中有这样两个编码概念:
source character set:源文件的编码
execution character set:执行环境的编码
还有一些额外的环境变量就是locale类的LC_XXX

在编译的时候,要执行从source character set到execution character set的转换。这个是由编译器来完成的。
locale是在程序的运行时决定程序的行为。

由于Freebsd下gcc的局限,你要使用wide characters,就是L"xxxx"这样的,源文件的编码必须为UTF-8
如果要在shell下正确的看到std::wcout输出的文字,则你的shell的locale也必须为UTF-8
另外,如果你使用的是gnome-terminal,注意它的显示编码也必须是utf-8

如果你采用了UTF-8的方式保存文件,"xxx" 这样的字符串在你的程序中就是以utf-8的方式保存的, L"xxx"这样的字符串在你的程序中就是以UCS-4的方式保存的。

为了永远摆脱乱码的困扰,我建议大家忍一忍,都使用UTF-8的方式保存文件吧。

_________________
my blog:http://snnn.sinaapp.com/
返回页首
阅览会员资料 发送站内信件 发送电子邮件 浏览发表者的主页 MSN Messenger
snnn
道士


注册时间: 2005-11-21
文章: 606
来自: 北京

文章发表于: Tue 2007-02-06 09:16:59    发表主题: 引用并回复

七七 写到:
把程序文件设置为UTF8,编译正常通过了.
但是运行的时候,中文显示还是乱码.英文倒是没错.
我已经setenv LC_ALL zh_CN.UTF-8了.
还需要设置什么?


这个就与你的term的设置有关了。
例如你的term的字体是否正确?term有没有采用utf-8编码?(例如gnome-terminal,konsole都需要设置编码)

_________________
my blog:http://snnn.sinaapp.com/
返回页首
阅览会员资料 发送站内信件 发送电子邮件 浏览发表者的主页 MSN Messenger
orzdummy
老妖


注册时间: 2007-01-27
文章: 1406

文章发表于: Tue 2007-02-06 09:17:25    发表主题: 引用并回复

snnn 写到:
C/C++中有这样两个编码概念:
source character set:源文件的编码
execution character set:执行环境的编码
还有一些额外的环境变量就是locale类的LC_XXX

在编译的时候,要执行从source character set到execution character set的转换。这个是由编译器来完成的。
locale是在程序的运行时决定程序的行为。

由于Freebsd下gcc的局限,你要使用wide characters,就是L"xxxx"这样的,源文件的编码必须为UTF-8
如果要在shell下正确的看到std::wcout输出的文字,则你的shell的locale也必须为UTF-8
另外,如果你使用的是gnome-terminal,注意它的显示编码也必须是utf-8

如果你采用了UTF-8的方式保存文件,"xxx" 这样的字符串在你的程序中就是以utf-8的方式保存的, L"xxx"这样的字符串在你的程序中就是以UCS-4的方式保存的。

为了永远摆脱乱码的困扰,我建议大家忍一忍,都使用UTF-8的方式保存文件吧。

LZ已经按照我说的保存了文件了,我现在怀疑的是LZ使用的ssh client有问题,譬如putty,要加上额外的设置才可以正确显示UTF-8编码的字符。
返回页首
阅览会员资料 发送站内信件
从以前的文章开始显示:   
发表新文章   这个论题已经被锁定,您不能发表、回复或者编辑文章。    FreeBSD China -> 编程天地 论坛时间为 北京时间
1页/共1

 
转跳到:  
不能发布新主题
不能在这个论坛回复主题
不能在这个论坛编辑自己的文章
不能在这个论坛删除自己的文章
不能在这个论坛发表投票


Powered by phpBB 2023cc © 2003 Opensource Steps; © 2003-2009 The FreeBSD Simplified Chinese Project
Powered by phpBB © 2001, 2005 phpBB Group
Protected by Project Honey Pot and phpBB.cc
silvery-trainer
The FreeBSD China Project 网站: 中文计划网站 社区网站
The FreeBSD China Project 版权所有 (C) 1999 - 2003 网页设计版权 著作权和商标