1、实现中文转Unicode

并将转换的16进制存进数组中

#include <iostream>
#include <string>
#include<stdio.h>
#include <wchar.h>
#include <stdlib.h>
constexpr auto LEN = 2048;   //vs中编译,更换编译环境需要修改 #define  LEN  2048
int main()
{char sendbuf[LEN];wchar_t str[] = L"中国汉字";int i,k = 0;int move_bit = 0;  setlocale(LC_ALL, "zh_CN.utf8");char* buf = (char*)malloc(MB_CUR_MAX);for (i = 0; i < wcslen(str); i++)wprintf(L"%lx", str[i]);printf("\n");short * p =(short*) str;for (i = 0; i < wcslen(str); i++){printf("%x ", p[i]); int four_bit = p[i] >> 12;int three_bit = (p[i] & 0x0fff) >> 8;int two_bit = (p[i] & 0x00ff) >> 4;int one_bit = p[i] & 0xf;if (four_bit > 9)sendbuf[k++] = four_bit + 55;elsesendbuf[k++] = four_bit + 48;if (three_bit > 9)sendbuf[k++] = three_bit + 55;elsesendbuf[k++] = three_bit + 48;if (two_bit > 9)sendbuf[k++] = two_bit + 55;elsesendbuf[k++] = two_bit + 48;if (one_bit > 9)sendbuf[k++] = one_bit + 55;elsesendbuf[k++] = one_bit + 48;}printf("\n");printf("%s \n", sendbuf);
}

2、setlocale函数

setlocale函数:
原型:char* setlocale (int category, const char* locale);
setlocale() 函数既可以用来对当前程序进行地域设置(本地设置、区域设置),也可以用来获取当前程序的地域设置信息,使用setlocale需要两个参数
category:用来设置地域设置的影响范围。地域设置包含日期格式、数字格式、货币格式、字符处理、字符比较等多个方面的内容,当前的地域设置可以只影响某一方面的内容,也可以影响所有的内容,
category 的值不能随便设置,必须使用 <locale.h> 中定义的宏
通常有下面这些预定义常量:LC_ALL、LC_COLLATE、LC_CTYPE、LC_MESSAGES、LC_MONETARY、LC_NUMERIC、LC_TIME,其中 LC_ALL 表示所有其它locale分类的并集。
locale:用来设置地域设置的名称(字符串),也就是设置为哪种地域,对于不同的平台和不同的编译器,地域设置的名称可能会不同,C语言标准没有干预太多。
setlocale函数的返回值:
如果 setlocale() 执行成功,那么返回一个指向字符串的指针,该字符串包含了当前地域设置的名称。也就是说,setlocale() 会将当前地域设置的名称返回
如果 setlocale() 执行失败(例如为 locale 指定的名称不存在,就会导致地域设置失败),那么返回空指针NULL

当向终端、控制台输出 wchar_t 类型的字符时,需要设置 setlocale(),因为通常终端、控制台环境自身是不支持 UCS 系列的字符集编码的,当我们使用流操作函数时(如:printf()/fopen_s等),在标准/RT库实现的内部会将 UCS 字符转换成合适的本地 ANSI 编码字符,转换的依据就是 setlocale() 设定的活动 locale,最后将结果字符序列传递给终端,对于来自终端的输入流这个过程刚好相反。所以,当我们使用流操作函数之前,往往需要使用setlocale函数实现字符集编码转换。
可以用重定向输出流到文件的方法验证上面的机制:无论是 Windows CRT、Linux glibc、Cygwin glibc,使用 wprintf() 打印 wchar_t 字符文本时,重定向到文件的内容总是 GBK、UTF-8 等本地 ANSI 编码,而不会是 UCS 编码。

使用 Linux 和 Cygwin 的 glibc 时,要在终端显示正确的中文,需满足以下条件:
不要混用 char 和 wchar_t 版本的流操作函数,否则会导致这些函数运行异常,我用Cygwin GCC 4测试混用 printf() 和 wprintf() 时,程序甚至崩掉,所以要将上面程序中 printf() 语句全注释掉才行。Window CRT 的实现则没有这个问题

运行环境的 locale 设置要和程序中 setlocale() 设定的 locale 一致,比如:终端的活动字符集、环境变量(一般用 LANG),要设置为 *.UTF-8,才能显示 setlocale(LC_ALL, “zh_CN.UTF-8”) 设定的 wchar_t 的中文字符。

用 wprintf() 时,要用 %ls 表示 wchar_t 的字符串,用 %s 表示 char 的字符串,具体参考:man 3 wprintf,而 Windows 的实现用 %ls、%s 都可以正确输出 wchar_t 字符串。

wchar_t,宽字符,是C/C++的字符类型,是一种扩展的存储方式。
wchar_t类型主要用在国际化程序的实现中,但它不等同于unicode编码。unicode编码的字符一般以wchar_t类型存储。

char是8位字符类型,最多只能包含256种字符,许多外文字符集所含的字符数目超过256个,char型无法表示。
wchar_t数据类型一般为16位或32位,所能表示的字符数远超char型。

比如对于汉字,韩文以及日文这样的字符,它们的每一个文字都占据两个字节,所以C++提出了wchar_t类型,也称为双字节类型,或宽字符类型。

中文转Unicode编码相关推荐

  1. robotframework中文乱码---robotframework日志输出时出现中文以unicode编码方式

    robotframework日志输出时出现中文以unicode编码方式 解决方法: 1.找到目录:python安装目录下C:\python373\Lib\site-packages\robotide\ ...

  2. python 中文转Unicode编码 Unicode编码转中文的四种方法

    一,中文转Unicode编码 chinese = "你好" re = chinese.encode("unicode_escape") print(re)返回: ...

  3. js中文转Unicode编码与解码

    中文转为unicode 编码 function encodeUnicode(str) {var res = [];for (var i = 0; i < str.length; i++) {re ...

  4. php 中文 encode,php 解决json_encode 时中文出现unicode编码

    您现在的位置是:网站首页>>PHP>>php php 解决json_encode 时中文出现unicode编码 发布时间:2018-09-28 09:30:49作者:wangj ...

  5. 使用python将中文与Unicode编码相互转换

    示例代码: s = '我爱你祖国'# 将中文转换为Unicode编码 s_unicode = s.encode() print(s_unicode)# 将Unicode编码转换为中文 s = s_un ...

  6. python 中文转unicode编码_python实现unicode转中文及转换默认编码的方法

    本文实例讲述了python实现unicode转中文及转换默认编码的方法.分享给大家供大家参考,具体如下: 一.在爬虫抓取网页信息时常需要将类似"\u4eba\u751f\u82e6\u77e ...

  7. 车牌、手机、身份证、等敏感信息 屏蔽 替换 、中文转unicode编码 函数

    应工作要求,需要对展示的内容进行敏感信息替换. 琢磨的一些时间,编写的函数匹配率还是比较高的. 顺便说下思路,使用的是正则匹配替换和字符串替换.函数可以再改进. 先把需要匹配的内容写好相应的正则,然后 ...

  8. python 中文转unicode编码_Python 解码 Unicode 转义字符串

    其实,这里要讨论的内容是针对 Python2 的,实际上也是 Python2 中让人头疼的编码问题,而 Python3 则好处理得多. 先来看看例子: >>> s = "我 ...

  9. python 数据写入json文件时中文显示Unicode编码问题

    三.解决办法 在json.dumps()方法中加入一个参数!!ensure_ascii=False!!!!!!!!!ensure_ascii=False!!!!!!!!ensure_ascii=Fal ...

最新文章

  1. 关于Unsupported major.minor version 52.0报错问题解决方案
  2. 【C语言】13-指针和字符串
  3. 《中国人工智能学会通讯》——2.2 智能汽车人机交互与人机协同技术
  4. jitwatch查看JIT后的汇编码
  5. 数字图像处理技术详解程序_安装地暖施工程序有哪些 安装地暖技术要求是什么【详解】...
  6. math标准库函数功能汇总
  7. 抛出错误_如何找到抛出ORA00933错误的SQL
  8. SCCM 2012系列3 安装SCCM 2012
  9. unsigned long long 溢出 乘_Java整数相加溢出怎么办?Java8一步搞定
  10. windows下gradle下使用windows版普罗米修斯prometheus和metrics简单的制作一个监控java环境的内存状况的教程
  11. [论文阅读] Cost-Effective Active Learning for Deep Image Classification
  12. iOS9使用提示框的正确实现方式(UIAlertView is deprecated)
  13. Dahlia:一个现代化的 React 框架
  14. 51单片机汇编学习笔记1——内部结构
  15. ISO20000与ITIL、ISO27000、CMMI、BS25999的相互区别
  16. 超媒体是什么?Hypermedia(一种采用非线性网状结构对块状多媒体信息(包括文本、图像、视频等)进行组织和管理的技术)
  17. mysql,php,redis,jq小记
  18. 坚果pro android版本,坚果Pro有几个版本 哪个版本好?坚果Pro各版本的区别
  19. 常见的分类算法及分类算法的评估方法
  20. vue封装请求 获取上传文件进度及设置超时时间

热门文章

  1. 开源|优酷动态模板研发体系为分发提效30%
  2. DRP项目:知识,我们的成长记录
  3. python刷票 黑科技_抢火车票这个事吧,其实我也能做!(python黑科技)
  4. 基于多目标粒子群算法(MOPSO)的含风管柴储的微电网多目标优化——附代码
  5. Python 创建词云 注意事项
  6. C语言isalpha函数介绍、示例和实现
  7. javascript面向对象笔记(一)
  8. webrtc QOS方法二.1(FEC原理)
  9. 买厨房小厨宝(二),再说国美电器
  10. Xamarin跨平台移动开发解决方案