关于GBK和UTF-8之间的转换,很多初学者会很迷茫。
一般来说GBK和UTF-8是文字的编码方式,其对应的内码是不一样的,所以GBK和UTF-8的转换需要对内码进行一一映射,然后进行转换。
对于一般系统上的工程,一般使用libiconv即可,但是对于嵌入式或手机操作系统,libiconv显得就有点庞大了。
在这里提供GBK和UTF8转换以及全半角、大小写转换等函数,希望对手机开发的同学有所帮助,特别是在iOS上开发的同学。
具体全半角、简繁体转换使用方法见下代码:
#include "strnormalize.h" #include <stdio.h> #include <stdlib.h> #include <string.h> int main(int argc, char **argv) { str_normalize_init(); unsigned options = SNO_TO_LOWER | SNO_TO_HALF; if (argc > 1) options = atoi(argv[1]); char *buffer = (char *)malloc(65536); memset(buffer, 0, 65536); while (fgets(buffer, 65536, stdin)) { str_normalize_utf8(buffer, options); printf("%s", buffer); } free(buffer); return 0; }
UTF-8和GBK转换使用方法如下:
#include <jni.h> #include <string> #include <android/log.h> #include "strnormalize.h" #define LOGI(...) ((void)__android_log_print(ANDROID_LOG_INFO, "test-log", __VA_ARGS__)) extern char test123[]; int test() { str_normalize_init(); const char *utf8 = "我是utf-8字符!"; const char *gbk = test123; uint32_t utf8_len = strlen(utf8); uint32_t gbk_len = strlen(utf8); uint32_t utf8buffer_len = utf8_len * 3 + 1; uint32_t gbkbuffer_len = gbk_len * 2 + 1; char *utf8buffer = (char *) malloc(utf8buffer_len); char *gbkbuffer = (char *) malloc(gbkbuffer_len); memset(utf8buffer, 0, utf8buffer_len); memset(gbkbuffer, 0, gbkbuffer_len); utf8_to_gbk(utf8, utf8_len, gbkbuffer, &gbkbuffer_len); gbk_to_utf8(gbk, gbk_len, utf8buffer, &utf8buffer_len); LOGI("utf8: %s<=>%d \t gbkbuffer: %s<=>%d\n", utf8, utf8_len, gbkbuffer, gbkbuffer_len); LOGI("gbk: %s<=>%d \t utf8buffer: %s<=>%d\n", gbk, gbk_len, utf8buffer, utf8buffer_len); free(utf8buffer); free(gbkbuffer); return 0; } extern "C" JNIEXPORT jstring JNICALL Java_com_fj_myjni_MainActivity_stringFromJNI(JNIEnv *env, jobject /* this */) { test(); std::string hello = "Hello from C++"; return env->NewStringUTF(hello.c_str()); }
extern char test123[];是一个gbk文件定义的中文字符串
extern char test123[] = "GB2312中文测试喽";
收藏的用户(0) X
正在加载信息~
推荐阅读
最新回复 (0)
站点信息
- 文章2281
- 用户1336
- 访客9569958
每日一句
Sweat is the lubricant of success.
汗水是成功的润滑剂。
汗水是成功的润滑剂。
- 亲测!虚拟机VirtualBox安装MAC OS 10.12图文教程
- Debian6的可用源,解决apt-get update的404错误
- 解决android studio 4.4使用javah失败
- font-awesome-to-png快速将Font-Awesome字体保存为PNG图片
- IDEA 2018创建Netty工程——入门篇
- 5G:无线网络的未来?
- 简单利用Clover四叶草安装U盘安装黑苹果
- 一篇非常不错的xposed插件教程
- UAC的限制引起WM_DROPFILES无法响应的解决办法
- iMessage for Android是我们需要的但不是我们想要的
- VMware NAT端口映射外网访问虚拟机linux
- 转载一篇微信WEB端接口说明
- 打开显示interface.png 或者显示interface.swf
新会员