unicode转中文

(转自知乎)Unicode编码

佐手、 提交于 2020-03-06 13:34:21
很多人都把Unicode编码挂在嘴边,其实咱们现实生活中遇到的编码基本都是Unicode的 因为Unicode兼容了大多数老版本的编码规范例如 ASCII Unicode编码定义了这个世界上几乎所有字符(就是你眼睛看到的长那个样子的符号)的数字表示 也就是说Unicode为每个字符发了一张身份证,这张身份证上有一串唯一的数字ID确定了这个字符 在这个纷乱世界上存在的唯一性。Unicode给这串数字ID起了个名字叫[码点](Code Point) 而很多人说的编码其实是想表达[Unicode转换格式](即UTF,Unicode Transformation Formats) 有没有觉得眼前一亮豁然开朗?没错 这就是我们看到的UTF-8/UTF-16/UTF-32的前缀来源 这个[Unicode转换格式]的存在是为了解决[码点]在计算机中的二进制表现形式而设计的 毕竟我们的机内表示涉及存储位宽,兼容古老编码格式,码点是数值过大的罕见字符等问题 [码点]经过映射后得到的二进制串的转换格式单位称之为[码元](Code Unit)。也就是说如果有一种UTF的码点二进制表示有n字节,其码元为8位(1个byte),那么其拥有码元n个。每种UTF的码元都不同,其宽度被作为区分写在了UTF的后缀——这就是UTF-8/UTF-16/UTF-32的由来。UTF-8的码元是8位的,UTF

转: gbk, gb2312,big5,unicode,utf-8,utf-16的区别

和自甴很熟 提交于 2020-02-12 04:38:50
以前收藏的一篇 标题 谈谈Unicode编码,简要解释UCS、UTF、BMP、BOM等名词 选择自 fmddlmyy 的 Blog 关键字 谈谈Unicode编码,简要解释UCS、UTF、BMP、BOM等名词 这是一篇程序员写给程序员的趣味读物。所谓趣味是指可以比较轻松地了解一些原来不清楚的概念,增进知识,类似于打RPG游戏的升级。整理这篇文章的动机是两个问题: 问题一: 使用Windows记事本的“另存为”,可以在GBK、Unicode、Unicode big endian和UTF-8这几种编码方式间相互转换。同样是txt文件,Windows是怎样识别编码方式的呢? 我很早前就发现Unicode、Unicode big endian和UTF-8编码的txt文件的开头会多出几个字节,分别是FF、FE(Unicode),FE、FF(Unicode big endian),EF、BB、BF(UTF-8)。但这些标记是基于什么标准呢? 问题二: 最近在网上看到一个ConvertUTF.c,实现了UTF-32、UTF-16和UTF-8这三种编码方式的相互转换。对于Unicode(UCS2)、GBK、UTF-8这些编码方式,我原来就了解。但这个程序让我有些糊涂,想不起来UTF-16和UCS2有什么关系。 查了查相关资料,总算将这些问题弄清楚了,顺带也了解了一些Unicode的细节

C++: VC6转VC8出现问题:error C2664: “fopen”: 不能将参数 1 从“CString”转换为“const char *”

别来无恙 提交于 2020-01-09 18:15:27
其实还可能出现其它类似的问题,如: error C2664: “fopen”: 不能将参数 1 从“CString”转换为“const char *” error C2039: “strcpy”: 不是“ATL::CStringT<BaseType,StringTraits>”的成员 但是程序在VC6下编译得很好,经过研究发现是设置上有所不同。在VC6中,默认使用MBCS编码,即多字节字符;而VC8、VC7默认的是Unicode编码,所以... 关于这两种编码有何不同,我引用了网上的一篇文章,由于作者匿名,只能在此感谢: http://pc.nengbang.cn/group_thread/view/id-2603 在VC6中,默认 使用 MBCS编码,即多字节字符,实际就是支持大于0x80的ASCII码。这样, 一个 中文字可以表示为2个字节,GB2312就是这样表示的。 VC6的默认 安装 是不带UNICODE库的,要在VC6中写UNICODE程序,必须 安装 CRT和MFC的Unicode库。 要使你的程序支持Unicode,要在你的项目属性中去掉"_MBCS"宏定义,增加"UNICODE"和"_UNICODE"两个宏定义。(注意,这两个都应该加上,因为CRT和MFC 使用 UNICODE定义,而STL则使用_UNICODE) 如果你的程序是MFC的

【转】python中文decode和encode转码

旧街凉风 提交于 2019-12-30 21:27:42
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 字符串在Python内部的表示是unicode编码,因此,在做编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码(decode)成unicode,再从unicode编码(encode)成另一种编码。 decode的作用是将其他编码的字符串转换成unicode编码,如str1.decode('gb2312'),表示将gb2312编码的字符串str1转换成unicode编码。 encode的作用是将unicode编码转换成其他编码的字符串,如str2.encode('gb2312'),表示将unicode编码的字符串str2转换成gb2312编码。 因此,转码的时候一定要先搞明白,字符串str是什么编码,然后decode成unicode,然后再encode成其他编码 (与代码本身的编码是一致的!) 测试: 我的eclipse里面代码为utf-8编码的。然后我这样写代码 s="你好" s=s.decode('gb2312').encode('utf-8') print s 报错: UnicodeDecodeError: 'gb2312' codec can't decode bytes in position 2-3: illegal multibyte sequence 原因

转:Java中String与byte[]的转换

孤街浪徒 提交于 2019-12-20 09:07:08
转:Java中String与byte[]的转换 原文地址:http://blog.csdn.net/llwan/article/details/7567906 String s = "fs123fdsa";//String变量 byte b[] = s.getBytes();//String转换为byte[] String t = new String(b);//bytep[]转换为String 做JAVA经常会碰到中文乱码问题,还有各种编码的问题,特别是String类的内容需要重新编码的问题。要解决这些问题,必须了解清楚JAVA对于字符串是怎么处理的。 1. “字符”是由数字来表示的 先来重新了解一下计算机是如何处理“字符”的,这个原理是大家必须记住的,特别是在用JAVA写程序的时候,万万不可模糊。我们知道,计算机把任何东西都用数字来表示,“字符”也不例外。比如我们要显示一个阿拉伯数字“3”,在我们的PC里,其实并不是仅仅用一个数字3来代表我们要写的“3”,而是以十六进制的0x33来代表,包括放在内存或者是写到文件里,其实都是写着0x33的,不信你可以编辑一个文本文件,写一个“3”,然后用ultraEdit看他的原始码。 2. 一切“字符”都必定用数字+编码表表示。 这时候,有一个问题:为什么一定要用0x33来代表“3”呢?而不用0x43来代表呢?或者是直接用0x03来代替

python3 字符串转十六进制unicode码

大憨熊 提交于 2019-12-06 08:14:37
笔者在折腾USB转GSM模块发中文短信的时候,PDU模式需要把字符串转成十六进制unicode码。 中文的好解决,encode unicode_escape编码就可以了 # 需要把\\u去掉才能用于USB转GSM模块发中文短信 >>> '中'.encode('unicode_escape') b'\\u4e2d' 但英文和数字就麻烦了,encode没有变化 >>> 'a'.encode('unicode_escape') b'a' 最终找到用 ord 把字符串转成ascii/unicode数值, 然后用 hex 把数值转成十六进制unicode码 # 十六进制unicode码长度大于4位的,需要去掉0x,等于4位的,需要把0x替换成00,才能用于USB转GSM模块发中文短信 >>> hex(ord('中')) '0x4e2d' -> '4e2d' >>> hex(ord('a')) '0x61' -> '0061' >>> hex(ord('2')) '0x32' -> '0032' 完美 但还有一个问题就是读取短信的时候读到的也是十六进制unicode码,这就脑壳疼了,不过我找到一个偷懒的方法,每4位组成一个十六进制unicode码,前面加上\u,eval一下就转成字符串了 >>> eval('\u0032') 2 >>> eval('\u0061') 'a' >>> eval(

Python Unicode与中文处理(转)

浪子不回头ぞ 提交于 2019-12-03 20:32:46
Python Unicode与中文处理 python中的unicode是让人很困惑、比较难以理解的问题,本文力求彻底解决这些问题; 1.unicode、gbk、gb2312、utf-8的关系; http://www.pythonclub.org/python-basic/encode-detail 这篇文章写的比较好,utf-8是unicode的一种实现方式,unicode、gbk、gb2312是编码字符集; 2.python中的中文编码问题; 2.1 .py文件中的编码 Python 默认脚本文件都是 ANSCII 编码的,当文件 中有非 ANSCII 编码范围内的字符的时候就要使用"编码指示"来修正。 一个module的定义中,如果.py文件中包含中文字符(严格的说是含有非anscii字符),则需要在第一行或第二行指定编码声明: # -*- coding=utf-8 -*-或者 #coding=utf-8 其他的编码如:gbk、gb2312也可以; 否则会出现类似:SyntaxError: Non-ASCII character '\xe4' in file ChineseTest.py on line 1, but no encoding declared; see http://www.pytho for details这样的异常信息;n.org/peps/pep-0263

java 中文与unicode互转

て烟熏妆下的殇ゞ 提交于 2019-12-03 16:54:26
public class YxqTest { public static void main(String[] args){ // unicode 打印 String title="\u4F60\u597D"; System.out.println(title); // 中文-转-unicode String str = "你好"; System.out.println(cnToUnicode(str)); // unicode-转-中文 String title2="\\u4F60\\u597D"; System.out.println(unicodeToCn(title2)); } private static String unicodeToCn(String unicode) { /** 以 \ u 分割,因为java注释也能识别unicode,因此中间加了一个空格*/ String[] strs = unicode.split("\\\\u"); String returnStr = ""; // 由于unicode字符串以 \ u 开头,因此分割出的第一个字符是""。 for (int i = 1; i < strs.length; i++) { returnStr += (char) Integer.valueOf(strs[i], 16).intValue(); }

unicode转码,以及阿里fastjson自动处理unicode转码

半腔热情 提交于 2019-12-02 05:44:44
从txt文件中读取json格式的文本,其中json对象中的某些属性是unicode码: \u0064\u0069\u0073\u0074\u0072\u0069\u0062\u0075\u0074\u0065\u0064\u005f\u0031\u0030\u0033 然后自己写了一个转码的方法: /** * unicode转中文 * @param str * @return */ public static String unicodeToString(String str) { Pattern pattern = Pattern.compile("(\\\\u(\\p{XDigit}{4}))"); Matcher matcher = pattern.matcher(str); char ch; while (matcher.find()) { ch = (char) Integer.parseInt(matcher.group(2), 16); str = str.replace(matcher.group(1), ch+"" ); } return str; } 后面要转为对象,肯定是要用到阿里的fastjson工具,发现JSONObject.parseObject()自动会把json字符串中的unicode码进行转换。 来源: https://blog.csdn.net

mysql utf8mb4与emoji表情【转】

孤人 提交于 2019-12-02 03:02:54
MYSQL 5.5 之前, UTF8 编码只支持1-3个字节,只支持BMP这部分的unicode编码区, BMP是从哪到哪,到 http://en.wikipedia.org/wiki/Mapping_of_Unicode_characters 这里看,基本就是0000~FFFF这一区。 从MYSQL5.5开始,可支持4个字节UTF编码utf8mb4,一个字符最多能有4字节,所以能支持更多的字符集。 utf8mb4 is a superset of utf8 utf8mb4兼容utf8,且比utf8能表示更多的字符。 至于什么时候用,看你的做什么项目了。。 在做移动应用时,会遇到ios用户会在文本的区域输入emoji表情,如果不做一定处理,就会导致插入数据库异常。 Emoji表情符号兼容方案 一 什么是Emoji emoji就是表情符号;词义来自日语(えもじ,e-moji,moji在日语中的含义是字符)   表情符号现已普遍应用于手机短信和网络聊天软件。   emoji表情符号,在外国的手机短信里面已经是很流行使用的一种表情。   手机上如何使用emoji:   1.iphone、ipad系统:安装emoji free,再设置-通用-键盘-国际键盘-添加新的键盘,然后把emoji添加在里面即可在发短信和一些输入文本的文本框中输入表情。   IOS 5用户可直接从通用中添加emoji