#include <iconv.h> #include <stdlib.h> #include <stdio.h> #include <unistd.h> #include <fcntl.h> #include <string.h> #include <sys/stat.h> int code_convert(char *from_charset, char *to_charset, char *inbuf, size_t inlen, char *outbuf, size_t outlen) { iconv_t cd; char **pin = &inbuf; char **pout = &outbuf; cd = iconv_open(to_charset, from_charset); if (cd == 0) return -1; memset(outbuf, 0, outlen); if (iconv(cd, pin, &inlen, pout, &outlen) == -1) return -1; iconv_close(cd); *pout = '\0'; return 0; } int u2g(char *inbuf, size_t inlen, char *outbuf, size_t outlen) { return code_convert("utf-8", "gb2312", inbuf, inlen, outbuf, outlen); } int g2u(char *inbuf, size_t inlen, char *outbuf, size_t outlen) { return code_convert("gb2312", "utf-8", inbuf, inlen, outbuf, outlen); } int main(void) { char *s = "中国"; int fd = open("test.txt", O_RDWR|O_CREAT, S_IRUSR | S_IWUSR); char buf[10]; u2g(s, strlen(s), buf, sizeof(buf)); write(fd, buf, strlen(buf)); close(fd); fd = open("test.txt2", O_RDWR|O_CREAT, S_IRUSR | S_IWUSR); char buf2[10]; g2u(buf, strlen(buf), buf2, sizeof(buf2)); write(fd, buf2, strlen(buf2)); close(fd); return 1; }
上面是使用iconv函数。
方式二: 使用如下两个函数
mbstowcs将多字节编码转换为宽字节编码
wcstombs将宽字节编码转换为多字节编码
注意, 需要系统编码的支持, 可以通过locale -a 查看系统支持的。若不支持zh_CN.gbk, 需要安装,例如,在ubuntu上的安装步骤如下:
编辑
$sudo vi /var/lib/locales/supported.d/zh-hans更新成
zh_CN.UTF-8 UTF-8 zh_SG.UTF-8 UTF-8 zh_CN.GBK GBK zh_CN.GB18030 GB18030
// 更新 $ sudo locale-gen // 查看 $ locale -a C POSIX zh_CN.gb18030 zh_CN.gbk zh_CN.utf8 zh_SG.utf8
相关推荐
跨平台(windows Linux)是纯c实现 gbk/utf8互转,Ansi/Utf8互转,
通过查表实现C语言GBK、Unicode与UTF8互转,含转码表及接口函数,用于处理汉字编码的转码
c语言利用编码转换表实现gbk与unicode互转
GB2312编码与utf-8编码的字符串的转换,主要使用windows api函数MultiByteToWideChar和WideCharToMultiByte,代码简洁,经测试可用
gbk utf8 互转 通过查码表实现 单文件
原理是将UTF-8编码的汉字、字母、符号、数字等转换成unicode编码,而unicode和GBK编码存在对应关系,所以只需要将对应的unicode编码的数据对应转换码表(查表)即可得到GBK编码的内容,实现UTF-8和GBK编码互转。...
本资源为GB2312转UTF-8的C语言代码,实现方式为查表的方式,提供了可以调用的接口,里面有makefile,用于别的平台自行修改。
在`www.pudn.com.txt`和`ucs2Gbk互转的code_自己写的`这两个文件中,可能包含了具体的转换代码实现和示例数据。阅读这些文件可以帮助你更好地理解和应用这个自定义转换方法。请确保在实际操作时遵循版权规定,合理...
utf8编码与gbk编码的互转,纯c代码编写,适用于嵌入式系统,不带任何库实现的c语言代码。
`UnicodeToGB.c` 和 `UnicodeToGB.h` 这两个文件构成了一个 C 语言库,用于实现从 UNICODE 到 GB 和从 GB 到 UNICODE 的转换函数。下面是一些可能包含在这些源代码中的关键概念和函数: 1. **转换函数**:源代码中...
字符编码间的转换方法:...MultiByteToWideChar和WideCharToMultiByte函数是Windows操作系统中两个重要的字符编码转换函数,它们可以将不同的字符编码之间进行转换,从而实现字符编码之间的互操作性。
在实际应用中,根据业务需求,可以在同一数据库中混合使用不同存储引擎的表,以实现最佳性能和功能平衡。 通过本次实验,学生将能够熟练地使用MySQL进行数据库的基本操作,并理解不同存储引擎的特性,以便在实际...
GnuWin32_libiconv1.9.2正是这样一款专为Windows平台设计的库,它提供了解决各种编码格式互转问题的有效工具,使得开发者在Windows系统上能方便地进行GB2312、UTF-8、Unicode和GBK等编码间的转换。 GnuWin32项目是...
- `Encoding.Default.GetBytes(strTemp).Length`(i=14)表示字符串在默认编码(通常是GBK或UTF-8)下的字节数,中文字符通常占两个字节。 13. **null与空字符串的区别**: - `string str = null`未分配内存,...