嵌入式使用自带的iconv库utf-8转gbk失败,移植libiconv库解决

ARM嵌入式平台移植libiconv库

一、下载libiconv源码
1、可以从官方网站上进行下载
libiconv源码下载链接
2、也可以从这里下载libiconv源码这个是我从官网上下载好的方便大家使用。
二、交叉编译libiconv库
1、首先把下载好的文件放到linux目录下即可,然后进行解压:tar -xvzf libiconv-1.16.tar.gz
2、配置configure:
./configure --prefix=./out CC=arm-linux-gnueabihf-gcc -host=arm-linux -enable-shared -enable-static
这里的交叉编译器是arm-linux-gnueabihf-gcc,需要替换成你自己使用的交叉编译器。
3、配置完成之后就可以直接进行编译
执行 make && make install
或者执行
make
make install

三、使用方法
在源码目录下out目录下会生成几个文件夹
编译生成的文件

生成的库文件

头文件
把头文件和静态库文件或动态库文件拷贝到项目下进行加载和引用即可
LIB += libiconv.a libcharset.a
最好使用静态库文件,无需把库文件拷贝到ARM环境中,直接运行即可。

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 9
    评论
如果您的单片机没有可用的iconv,那么您可以手动编写一个简单的转换函数来将UTF-8编码的字符串转换GBK编码的字符串。以下是一个示例代码: ``` #include <stdio.h> #include <stdlib.h> #include <string.h> void utf8_to_gbk(char *utf8_str, char *gbk_str, int gbk_len) { int utf8_len = strlen(utf8_str); int i = 0, j = 0; while (i < utf8_len && j < gbk_len - 1) { if ((utf8_str[i] & 0x80) == 0) { // ASCII字符 gbk_str[j++] = utf8_str[i++]; } else if ((utf8_str[i] & 0xE0) == 0xC0) { // 双字节字符 int u1 = utf8_str[i++] & 0x1F; int u2 = utf8_str[i++] & 0x3F; int gb = (u1 << 8) | u2; if (gb < 0xA1A1 || gb > 0xFEFE) { // 不是GBK编码范围内的字符,转换失败 gbk_str[j++] = '?'; } else { gbk_str[j++] = (gb >> 8) & 0xFF; gbk_str[j++] = gb & 0xFF; } } else { // 不支持的UTF-8编码 gbk_str[j++] = '?'; i++; } } gbk_str[j] = '\0'; } int main() { char utf8_str[] = "Hello, 世界!"; char gbk_str[100] = {0}; utf8_to_gbk(utf8_str, gbk_str, sizeof(gbk_str)); printf("GBK string: %s\n", gbk_str); return 0; } ``` 在这个例子中,我们手动编写了一个utf8_to_gbk()函数来将UTF-8编码的字符串转换GBK编码的字符串。我们首先遍历UTF-8编码的字符串,对于每个字符,如果它是ASCII字符,我们直接将它复制到GBK编码的字符串;如果它是双字节字符,我们将它转换GBK编码的字符;如果它是其他编码,我们将它转换为'?'字符。转换完成后,我们将GBK编码的字符串打印出来。请注意,这个函数只支持UTF-8编码的部分字符,可能无法处理一些特殊的UTF-8编码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

烫手的热山药

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值