一开始,调用iconv_open()会返回-1,使用printf("errno=%d\n",errno)查看,返回22,说是invalid argument参数非法。

试了下,确定不是UTF-8或utf-8的大小写问题。然后按博客http://blog.csdn.net/love_life2011/article/details/7086910#comments所述,更新iconv函数簇为较新版本后即可。

附http://blog.csdn.net/love_life2011/article/details/7086910#comments内容:

相同的C源程序,在ubuntu11.10上能够正常执行,而在ARM开发板则不能正常执行,调用 iconv_open("utf-8", "gb2312") 返回失败,错误信息为“Invalid argument”. 经过查询资料得知iconv相关函数为libc中的函数,初步分析得出结论为有可能是libc版本中 iconv相关函数的版本不同造成的,因此要更新iconv相关函数。 更新iconv相关函数有两种方法: 第一,更新libc库; 第二,更新libiconv库。 第一种方法更新libc库比较麻烦,因为我们用的是编译好的交叉编译器,这中方法需要重新编译生成

交叉编译器,并且也需要使用新编译生成的交叉编译工具重新编译应用程序,因此本方法代价太大,

采用第二种方法。

第二种方法为只更新libiconv库,到iconv官网下载最新的库源码包,下载地址为:

http://ftp.gnu.org/gnu/libiconv/libiconv-1.14.tar.gz

解压后得到libiconv目录,阅读该目录下Readme文件得出,编译安装libiconv库也有两种方式:

This library can be built and installed in two variants:

- The library mode. This works on all systems, and uses a library

`libiconv.so' and a header file `'. (Both are installed

through "make install".)

To use it, simply #include and use the functions.

To use it in an autoconfiguring package:

- If you don't use automake, append m4/iconv.m4 to your aclocal.m4

file.

- If you do use automake, add m4/iconv.m4 to your m4 macro repository.

- Add to the link command line of libraries and executables that use

the functions the placeholder @LIBICONV@ (or, if using libtool for

the link, @LTLIBICONV@). If you use automake, the right place for

these additions are the *_LDADD variables.

Note that 'iconv.m4' is also part of the GNU gettext package, which

installs it in /usr/local/share/aclocal/iconv.m4.

- The libc plug/override mode. This works on GNU/Linux, Solaris and OSF/1

systems only. It is a way to get good iconv support without having

glibc-2.1.

It installs a library `preloadable_libiconv.so'. This library can be used

with LD_PRELOAD, to override the iconv* functions present in the C library.

On GNU/Linux and Solaris:

$ export LD_PRELOAD=/usr/local/lib/preloadable_libiconv.so

On OSF/1:

$ export _RLD_LIST=/usr/local/lib/preloadable_libiconv.so:DEFAULT

A program's source need not be modified, the program need not even be

recompiled. Just set the LD_PRELOAD environment variable, that's it!

我在ARM开发板上采用“The libc plug/override mode”实验成功,下面介绍编译过程:

在libiconv目录下:

$./configure --prefix=$PWD/out --host=arm-linux

$make

$make install

上述命令执行完成后会在libiconv目录下生成新的out目录,该目录下存在4个目录分别是:

bin include lib share

在lib目录下为生成的库文件,其中一个为preloadable_libiconv.so,把它下载到开发板

的lib目录下,然后再设置开发板的系统环境变量:

$ export LD_PRELOAD=/lib/preloadable_libiconv.so

然后再执行应用程序即可,正常运行。

linux iconv函数失败,Linux 编码转换 (iconv失败的解决方法)相关推荐

  1. c语言使用iconv函数实现字符编码转换

    c语言使用iconv函数实现字符编码转换 linux下提供了iconv库来实现字符编码转换,先介绍下命令行: iconv [-f encoding] [-t encoding] [inputfile ...

  2. php iconv 空格,PHP_PHP中iconv函数转码时截断字符问题的解决方法,iconv是转换编码的,但是在中 - phpStudy...

    PHP中iconv函数转码时截断字符问题的解决方法 iconv是转换编码的,但是在中文转码时候出现显示不全问题. iconv("UTF-8","GB2312//IGNOR ...

  3. 网站建设ASP中UTF-8与GB2312编码转换乱码问题的解决方法

    现在blog程序一般都是utf-8编码的,要在网站里加入其它的程序的话,如果不是utf-8而是gb2312的话,在页面转换的时候很容易出现打开的页面时乱码,经过查找资料和测试,总结出现在最好的一个方法 ...

  4. php中iconv函数使用_字符集转换编码

    php中iconv函数介绍 iconv函数库能够完成各种字符集间的转换,是php编程中不可缺少的基础函数库. 1.下载libiconv函数库http://ftp.gnu.org/pub/gnu/lib ...

  5. php 转码iconv,PHP iconv()函数转字符编码的问题(转)

    在php函数库有一个函数:iconv(),iconv函数库能够完成各种字符集间的转换,是php编程中不可缺少的基础函数库. 最 近在做一个小偷程序,需要用到iconv函数把抓取来过的utf-8编码的页 ...

  6. PHP iconv()函数转字符编码的问题(转)

    载自:http://www.nowamagic.net/php/php_FunctionIconv.php 在php函数库有一个函数:iconv(),iconv函数库能够完成各种字符集间的转换,是ph ...

  7. linux 繁体中文转为简体,Linux下对文件进行编码转换(简体→繁体,繁体→简体,简体繁体→UTF-8)...

    其实说到编码转换,那就不得不说到iconv这个库了,如果已经安装了这个工具,那在命令行下直接打这个命令就行了.下面就用这个工具来实现中文系统下的常用编码转换. 首先,来了解一下iconv这个命令的使用 ...

  8. linux如何判断数组是否为空,Linux fgetcsv取得的数组元素为空字符串的解决方法

    Linux fgetcsv取得的数组元素为空字符串的解决方法 但服务器上,很多使用Linux服务器,源程序使用UTF-8,这样很容易产生字符编码的问题. 如果仅仅将CSV文件转码为UTF-8,这样在W ...

  9. Linux执行可执行文件提示No such file or directory的解决方法

    Linux执行可执行文件提示No such file or directory的解决方法 查阅资料后,原因是系统位数与该可执行文件需要的lib库位数不匹配. 用uname命令打印系统信息,发现系统是6 ...

  10. linux学习之路——ubuntu 16.04 开机开启数字小键盘解决方法

    linux学习之路--ubuntu 16.04 开机开启数字小键盘解决方法 参考文章: (1)linux学习之路--ubuntu 16.04 开机开启数字小键盘解决方法 (2)https://www. ...

最新文章

  1. [总结篇3]Provider_network的含义
  2. python语法教程-Python语法教程总结规范
  3. 树莓派linux驱动学习之LED控制
  4. 超简单-用协程简化你的网络请求吧,兼容你的老项目和旧的网络请求方式
  5. 七夕节福利,一套java架构师资源等你拿
  6. aspectj annotation- used in spring
  7. python语言包括哪些实现_Python语言基础考察点:python语言基础常见考题(一)
  8. LeetCode 1136. 平行课程(拓扑排序)
  9. win10计算器_喜欢 Win10 计算器?现在各个平台都能拥有!
  10. C语言《填数游戏》全流程
  11. 大数据工作流开源系统之DRAKE
  12. 基于麒麟座继续串口--DMA可以顺手开启-它是ADD不影响
  13. 阿里飞猪一员工贩卖机票报销发票获利超千万被判六年
  14. 【Mskt问题的解决办法】使用御坂翻译器2.x版本遇到的常见问题及解决办法
  15. dbcontext的使用
  16. 不可错过的250款独立游戏(珍藏版)
  17. Matlab中的pinv和inv
  18. 如何学习Java?谈Java学习之路
  19. 浏览器获取MAC地址
  20. 鲍尔默退休:Wintel帝国走向崩溃还是重构?

热门文章

  1. android 实训的背景,Android实训项目作业.doc
  2. [ 云炬创业基础笔记]商业模式创新
  3. A humble heart2019-11-09
  4. 命令行设置dns_网络感叹号dns未响应
  5. VTK修炼之道56:图形基本操作进阶_表面重建技术(三维点云曲面重建)
  6. delphi调用选择目录对话框
  7. QT计算器功能的实现
  8. LGB + KFold 代码 (1)
  9. 为了输出“,可以使用如下语句print(“““)————(×)
  10. DM368开发 -- uboot 使用