用C语言实现中文到unicode码的转换

由于本人喜欢用Notepad++编辑器,该编辑器的好处是小巧灵活,但是有几个地方做的不足,但是我都能够很好的采取相应的措施来替代,下面让我们看看Notepad++有哪些地方的不足,进而采取怎样的措施。


一:Notepad++不能打开16进制文件,UE可以实现;

常用解决:我们常用的Beyond Compare 4(文本比较)可以轻松代替Notepad++不能看16进制的问题。

Notepad++不能实现对字母,汉字转换成ascii码,uniconde码。用UE可以轻松代替。

常用解决方法:如下面代码所写的,在linux命令下编译生成可执行文件,然后就可以运行了,就能实现你相应的功能转换,我写这个小工具是为了方便我自己用。

有些朋友就不明白了,既然UE能够那么好的实现功能,你为什么不选择用UE,所以我在这里我得说下,这看个人喜好,我喜欢Notepad++,小巧,界面直观,免费。


unicode中文编码表:请点击这里!            字符编码笔记:ASCII,Unicode和UTF-8请点击这里!

把中文转换成uniconde码:main.c

#include <stdio.h>

#include <string.h>
#include <math.h>
#include <wchar.h>

int main()
{
   wchar_t *chinese_str = L"网络人VS灰鸽子";
  unsigned int *p = (wchar_t *)chinese_str;
  int i;
  printf("Uniocde: \n");
  for (i = 0; i < wcslen(chinese_str); i++)
  {
  printf("0x%x ", p[i]);

  }

 printf(" \n");

    return 0 ;

}


编译:gcc -finput-charset=GBK -fexec-charset=UTF-8 -o main main.c 

上面的编译命令你照做就可以了,如果你不带上面的参数编译会报错,如下:

 main.c:8:24: error:   converting to execution character set: Invalid or incomplete multibyte or wide character

这是编码的问题,如果你在windos上编写代码保存的格式是GBKgcc的编码格式默认是UTF-8

源文件用不同的编码方式编写,会导致执行结果不一样。

man gcc , /charset     /*查看gcc的编码格式解析编码和运行编码*/
-finput-charset=charset  表示源文件的编码方式, 默认以UTF-8来解析
-fexec-charset=charset   表示可执行程序里的字时候以什么编码方式来表示,默认是UTF-8

./main 

Uniocde: 
0x7f51 0x7edc 0x4eba 0x56 0x53 0x7070 0x9e3d 0x5b50 

!!!!上面编码可以测试。在PC机上打开一个记事本然后把程序写上去,另存为不同的格式。可以自行尝试。自行测试后更能够加深你的理解。


实现对字符和ascii码之间的转换(写的不是很精简)

/* gets example */
#include <stdio.h>
#include <string.h>
#include <stdlib.h>


void print_usage(char *file)
{
/* gets example */
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void print_usage(char *file)
{
  printf("%s c/a\n",file);
}
int main(int argc,char **argv)
{
  char str;
  int  cnt;


  if(argc!=2)
{
print_usage(argv[0]);
return -1;
}

if(strcmp(argv[1],"c")==0)
{
   printf ("Insert your ascail: ");
   scanf("%x",&cnt);
   printf ("Your Ascail is: %d  0x%x '%c'\n",cnt,cnt,cnt);
}
if(strcmp(argv[1],"a")==0)
{
  printf ("Insert your char: ");
 scanf("%c",&str);
 printf ("Your Ascail is: %d  0x%x  '%c'\n",str,str,str);
}
 return 0;
}
编译:  gcc main.c -o mian      

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值