转自:  http://blog.csdn.net/qq_21792169/article/details/50379275

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

由于本人喜欢用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上编写代码保存的格式是GBK,gcc的编码格式默认是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 main

用C语言实现中文到unicode码的转换的更多相关文章

  1. 汉字编码(【Unicode】 【UTF-8】 【Unicode与UTF-8之间的转换】 【汉字 Unicode 编码范围】【中文标点Unicode码】【GBK编码】【批量获取汉字UNICODE码】)

    Unicode与UTF-8互转(C语言实现):http://blog.csdn.net/tge7618291/article/details/7599902 汉字 Unicode 编码范围:http: ...

  2. pythonl输出的预警消息中的json串的中文展示乱码(中文的unicode码)

    来源:ctrip接口名称:ReviewStandartAPI错误信息:[{'ReviewTime': u'\u63a5\u53e3\u8fd4\u56de\u7684\u70b9\u8bc4\u65f ...

  3. python3进行汉字和unicode码的转换

    输出某个unicode码对应的汉字和某个汉字对应的unicode编码. # -*- coding=UTF-8 -*- str1 = "\u6000"#某个汉字的unicode码 s ...

  4. python 网页中文显示Unicode码

    print repr(a).decode("unicode–escape") 注:a是要输出的结果,

  5. golang实现unicode码和中文之间的转换

    将中文转换为unicode码,使用golang中的strconv包中的QuoteToASCII直接进行转换,将unicode码转换为中文就比较麻烦一点,先对unicode编码按\u进行分割,然后使用s ...

  6. ASCII码、Unicode码 转中文

    ASCII码.Unicode码 转中文 在最近工作中遇到了一些汉字编码转换的处理,可以通过正则表达式及转换字符来实现转成中文 Unicode转换示例 通常为10位编码, 通过digit参数传入 pri ...

  7. 通过http.client解析url返回的数据时为什么中文变成了unicode码

    今天在解析json数据的时候得到了一堆这样的数据:{"errNum":0,"errMsg":"success","retData& ...

  8. java程序实现Unicode码和中文互相转换

      根据前一篇的补充问题http://blog.csdn.net/fancylovejava/article/details/10142391 有了前一篇文章的了解,大概了解了unicode编码格式了 ...

  9. 【python2/3坑】从gensim的Word2Vec.load()的中文vector模型输出时显示unicode码

    服务器上python2.7 打印出的e[0]对应的是 unicode码 于是分别尝试了用e[0].encode('utf-8')转码 和 e[0].decode('unicode-escape')依然 ...

随机推荐

  1. Bootstrap 轮播图(Carousel)插件

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. Crontab使用详解

    第1列分钟1-59第2列小时1-23(0表示子夜)第3列日1-31第4列月1-12第5列星期0-6(0表示星期天)第6列要运行的命令 下面是crontab的格式:分 时 日 月 星期 要运行的命令 这 ...

  3. 基于WebServices简易网络聊天工具的设计与实现

    基于WebServices简易网络聊天工具的设计与实现 Copyright 朱向洋 Sunsea ALL Right Reserved 一.项目内容 本次课程实现一个类似QQ的网络聊天软件的功能:服务 ...

  4. JavaScript日期选择控件Kalendae

    在线演示 本地下载

  5. castle windsor学习----ComponentModel construction contributors

    public class RequireLoggerProperties : IContributeComponentModelConstruction { public void ProcessMo ...

  6. QT 操作数据库SQLite实例

    #include "widget.h" #include <QApplication> #include <QtSql> #include <QTex ...

  7. Spark- Checkpoint原理剖析

    Checkpoint,是Spark 提供的一个比较高级的功能.有的时候,比如说,我们的 Spark 应用程序,特别的复杂,然后从初始的RDD开始,到最后拯个应用程序完成,有非常多的步骤,比如超过20个 ...

  8. python3 字符串属性(三)

    maketrans 和 translate的用法(配合使用) 下面是python的英文用法解释 maketrans(x, y=None, z=None, /) Return a translation ...

  9. 分享知识-快乐自己:三种代理(静态、JDK、CGlib 代理)

    1):代理模式(静态代理)点我下载三种模式源码 代理模式是常用设计模式的一种,我们在软件设计时常用的代理一般是指静态代理,也就是在代码中显式指定的代理. 静态代理由 业务实现类.业务代理类 两部分组成 ...

  10. linux系统配置之开机启动过程(centos)

    1.开机流程如下: 2.BIOS BIOS是英文"Basic Input Output System"的缩略词,直译过来后中文名称就是"基本输入输出系统".其实 ...