關於GBK和UTF-8之間的轉換,很多初學者會很迷茫。
一般來說GBK和UTF-8是文字的編碼方式,其對應的內碼是不一樣的,所以GBK和UTF-8的轉換需要對內碼進行一一映射,然後進行轉換。
對於一般系統上的工程,一般使用libiconv即可,但是對於嵌入式或手機作業系統,libiconv顯得就有點龐大了。
在這裡提供GBK和UTF8轉換以及全半形、大小寫轉換等函數,希望對手機開發的同學有所協助,特別是在iOS上開發的同學。
strnormalize.h
strnormalize.c
具體全半形、簡繁體轉換使用方法見下代碼:
#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 "strnormalize.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdint.h>
int main(int argc, char **argv)
{
str_normalize_init();
const char *utf8 = "我是utf-8字元!";
const char *gbk = "����GBK�ַ���";
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);
printf("utf8: %s<=>%d \t gbkbuffer: %s<=>%d\n", utf8, utf8_len, gbkbuffer, gbkbuffer_len);
printf("gbk: %s<=>%d \t utf8buffer: %s<=>%d\n", gbk, gbk_len, utf8buffer, utf8buffer_len);
free(utf8buffer);
free(gbkbuffer);
return 0;
}
引用:http://my.huhoo.net/archives/2012/10/gbkutf8.html