unicode码表 unicode编码对应表
字符是什么?
扩展资料:在 ASCII 编码中,一个英文字母字符存储需要1个字节。
unicode码表 unicode编码对应表
unicode码表 unicode编码对应表
在UTF-16编码中,一个英文字母字符或一个汉字字符存储都需要2个字节(Unicode扩展区的一些汉字存储需要4个字节)。
字符是可使用多种不同字符方案或代码页来表示的抽象实体。
例如,Unicode UTF-16 编码将字符表示为 16 位整数序列,而 Unicode UTF-8 编码则将相同的字符表示为 8 位字节序列。
微软的公共语言运行库使用 Unicode UTF-16(Unicode 转换格式,16 位编码形式)表示字符。
参考资料:
字符指类字形单位或符号,包括字母、数字、运算符号、标点符号和其他符号,以及一些功能性符号。字符是电子计算机或电通信中字母、数字、符号的统称,其是数据结构中最小的数据存取单位,通常由8个二进制位(一个字节)来表示一个字符。
字符是计算机中经常用到的二进制编码形式,也是计算机中最常用到的信息形式。
作用
针对微软公共语言运行库的应用程序使用编码将字符表示形式从本机字符方案映射至其他方案。应用程序使用解码将字符从非本机方案映射至本机方案。
电脑和通讯设备会使用字符编码的方式来表达字符。意思是会将一个字符指定给某个东西。传统上,是代表整数量的位元序列,如此,则可透过网络来传输,同时亦便于储存。两个常用的例子是ASCII和用于统的UTF-8。
根据谷歌的统计,UTF-8是最常用于网页的编码方式。相较于大部分的字符编码把字符对应到数字或位元串,摩斯密码则是使用不定长度的电子脉冲的序列来表现字符。
字节是计算机信息技术用于计量存储容量和输入法能打出的东西都是字符,包括我们的汉字,五笔打字,每个笔画都对应一个数字代码。传输容量的一种计量单位,1个字节等于8位二进制。
一个英文字母(不分大小写)占一个字节的空间,一个中文汉字占两个字节的空间.
符号:英文标点占一个字节,中文标点占两个字节.
如电子表格中,一个汉字是占二个字节的
换算为1KB=1024B
字符
1.2 字符,字节,字符串
理解编码的关键,是要把字符的概念和字节的概念理解准确。这两个概念容易混淆,我们在此做一下区分:
字符 人们使用的记号,抽象意义上的一个符号。 '1', '中', 'a', '$', '¥', ……
ANSI
字符串 在内存中,如果“字符”是以 ANSI 编码形式存在的,一个字符可能使用一个字节或多个字节来表示,那么我们称这种字符串为 ANSI 字符串或者多字节字符串。 "中文123"
(占7字节)
字符串 在内存中,如果“字符”是以在 UNICODE 中的序号存在的,那么我们称这种字符串为 UNICODE 字符串或者宽字节字符串。 L"中文123"
底层逻辑里,电脑只认识0和1,在内存只能储存0和1,为了显示0和1之外的字符,大神制定了代码表。
以ASCII码表举例。这个码表里共有127个字符,包括大、小写的英文字母,和箭头符号等等,每个字符对应一个数字代码。
p由于不同 ANSI 编码所规定的标准是不相同的,因此,对于一个给定的多字节字符串,我们必须知道它采用的是哪一种编码规则,才能够知道它包含了哪些“字符”。而对于 UNICODE 字符串来说,不管在什么环境下,它所代表的“字符”内容总是不变的.utchar(65); //窗口显示的是字母A,因为在ASCII码表里,65对应的字符是A
putchar(65); // 十进制的65换算成十六进制是41,所以putchar(65)在内存中的值是41(0100 0001)
在ASCII码表中的,127个字符只能组合成英文之类的文字,天朝的象形文字以及其它的文字用这127个字符拼接不起来。
文字和符号 简称字符
ja中GBK编码格式转成UTF8,用一段方法实现怎么做
概念描述 举例public String charset2utf8(String在UTF-8编码中,一个英文字母字符存储需要1个字节,一个汉字字符储存需要3到4个字节。 src,String intputCharset){
return new String(src.getBytes(inputCharset),"utf-8);
}---------有一段时间各国的专家弄出自己的码表,用自己的码表来工作,导致打开国外的文件时,出现乱码。为了方便交流,后来各国共同制定统一的码表Unicode--
盲打的,有问题慢慢调试
字符是什么?
BufferedReader in = new BufferedReader(new InputStreamReader(System.in, "utf-8"));在 ASCII 编码中,一个英文字母字符存储需要1个字节。
buffer.toString('UCS2')即可转换成string对象。我制作的一张GBK码表可参见 这里 。在UTF-16编码中,一个英文字母字符或一个汉字字符存储都需要2个字节(Unicode扩展区的一些汉字存储需要4个字节)。
字符是可使用多种不同字符方案或代码页来表示的抽象实体。
例如,Unicode UTF-16 编码将字符表示为 16 位整数序列,而 Unicode UTF-8 编码则将相同的字符表示为 8 位字节序列。
微软的公共语言运行库使用 Unicode UTF-16(Unicode 转换格式,16 位编码形式)表示字符。
参考资料:
字符指类字形单位或符号,包括字母、数字、运算符号、标点符号和其他符号,以及一些功能性符号。字符是电子计算机或电通信中字母、数字、符号的统称,其是数据结构中最小的数据存取单位,通常由8个二进制位(一个字节)来表示一个字符。
字符是计算机中经常用到的二进制编码形式,也是计算机中最常用到的信息形式。
作用
针对微软公共语言运行库的应用程序使用编码将字符表示形式从本机字符方案映射至其他方案。应用程序使用解码将字符从非本机方案映射至本机方案。
电脑和通讯设备会使用字符编码的方式来表达字符。意思是会将一个字符指定给某个东西。传统上,是代表整数量的位元序列,如此,则可透过网络来传输,同时亦便于储存。两个常用的例子是ASCII和用于统的UTF-8。
根据谷歌的统计,UTF-8是最常用于网页的编码方式。相较于大部分的字符编码把字符对应到数字或位元串,摩斯密码则是使用不定长度的电子脉冲的序列来表现字符。
字节是计算机信息技术用于计量存储容量和传输容量的一种计量单位,1个字节等于8位二进制。
一个英文字母(不分大小写)占一个字节的空间,一个中文汉字占两个字节的空间.
符号:英文标点占一个字节,中文标点占两个字节.
如电子表格中,一个汉字是占二个字节的
换算为1KB=1024B
字符
1.2UNICODE 字符,字节,字符串
理解编码的关键,是要把字符的概念和字节的概念理解准确。这两个概念容易混淆,我们在此做一下区分:
字符 人们使用的记号,抽象意义上的一个符号。 '1', '中', 'a', '$', '¥', ……
ANSI
字符串 在内存中,如果“字符”是以 ANSI 编码形式存在的,一个字符可能使用一个字节或多个字节来表示,那么我们称这种字符串为 ANSI 字符串或者多字节字符串。 "中文123"
(占7字节)
字符串 在内存中,如果“字符”是以在 UNICODE 中的序号存在的,那么我们称这种字符串为 UNICODE 字符串或者宽字节字符串。 L"中文123"
底层逻辑里,电脑只认识0和1,在内存只能储存0和1,为了显示0和1之外的字符,大神制定了代码表。
以ASCII码表举例。这个码表里共有127个字符,包括大、小写的英文字母,和箭头符号等等,每个字符对应一个数字代码。
putchar(65); //窗口显示的是字母A,因为在ASCII码表里,65对应的字符是A
putchar(65); // 十进制的65换算成十六进制是41,所以putchar(65)在内存中的值是41(0100 0001)
在ASCII码表中的,127个字符只能组合成英文之类的文字,天朝的象形文字以及其它的文字用这127个字符拼接不起来。
文字和符号 简称字符
ja中GBK编码格式转成UTF8,用一段方法实现怎么做
首先明确几点:在 GB 2312 编码或 GBK 编码中,一个汉字字符存储需要2个字节。public String charset2utf8(String src,String intputCharset){
字节(Byte): 字节是通过网络传输信息(或在硬盘或内存中存储信息)的单位。return new String(src.getBytes(inputCharset),"utf-8);
}-----------
盲打的,有问题慢慢调试
ja字符串处理问题
Buffer.toString('UTF8')和Buffer字符是指计算机中使用的字母、数字、字和符号,包括:1、2、3、A、B、C、~!·#¥%……—()——+等等。.toString('UCS2')。编码问只是Unicode的实现方式之一。UCS2是UTF16的子集,UCS2编码中每个Unicode使用两个字节编码,高字节在高位。Node.JS支持题,换成utf-8应该就没事了。
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
改为
express app.js怎么抓取非utf-8编码格式的页面或js
GBK兼容ascii码,ascii字符用一字节编码,位为0,其它字符用两位编码,高字节从0x81。编解码时通过此规律对单字节和双字节字符加以区分。由此可见,GBK是单字节、双字节变长编码。linux环境下,我们可以通过 iconv 这个C++模块来处理Node.JS不支持的字符编码,如GBK,BIG5。
第二种,如何把一个gbk文件转化为utf-8文件iconv需要依赖native库,这样一来,在一些不支持native模块安装的虚拟主机和windows平台上,我们还是无法安心处理GBK编码。Google之,发现有老外写了一个通过纯Jascript转换编码的模块 iconv-lite ,不过仅支持少许单字节编解码。这个模块的初衷和我一致并且代码组织结构优雅,于是在github上fork了该项目准备支持GBK的编解码。这里是fork的项目。
字符常量是用单括号括起来的一个字符。String gbkString = new String(utf8String.getBytes("UTF8"), "GBK");
为了编写iconv-lite模块的gbk支持,不得不再一次学习字符编码原理,是的非常系统的学习资料:
Unicode
基本多文种平面
Unicode是全用编码
GBK也是Unicode的实现方式之一,总共23940个编码,编码范围可见下图:
UTF8与GBK进行转换,可以把Unicode作为中间编码。
UTF8编解Unicode规则简单,参见 UTF8
GBK编解Unicode无特定规则,一般可通过查表方式
Unicdoe-->GBK,生成相应的GBK字节流;GBK解码时,通过GBK-->Unicode,生成UCS2字节流,再通过
npm install iconv-lite
var iconv = require('iconv-lite');
var str = iconv.decode(buf, 'GBK'); //return unicode string from GBK encoded bytes
var buf = iconv.encode(str, 'GBK');//return GBK encoded bytes from unicode string
ja中GBK编码格式转成UTF8,用一段方法实现怎么做
扩展资料:unicode是一种“编码”,所谓编码就是一个编号(数字)到字符的一种映射关系,就仅仅是一种一对一的映射而已,可以理解成一个很大的对应表格
GBK、UTF-8是一种“编码格式”,是用来序列化或存储1中提到的那个“编号(数字)”的一种“格式”;GBK和UTF-8都是用来序列化或存储unicode编码的数据的,但是分别是2种不同的格式; 他们俩除了格式不一样之外,他们所关心的unicode编码范围也不一样,utf-8考虑了很多种不同的字符,涵盖整个unicode码表,所以其存储一个字符的编码的时候,使用的字节长度也从1字节到4字节不等;而GBK只考虑中文——在unicode中的一小部分——的字符,的编码,所以它算好了只要2个字节就能涵盖到绝大多数常用中文(2个字节能表示6w多种字符),所以它存储一个字符的时候,所用的字节长度是固定的;
上述2个概念不懂的请马上google,下面不再赘述;我下面说说这个问题本身...的问题在哪里
首先ja的string使用的编码是unicode,但是,当string存在于内存中时(也就是当程序运行时、你在代码中用string类型的引用对它进行作时、也就是string没有被存在文件中且也没有在网络中传输(序列化)时),是“只有编码而没有编码格式的”,所以ja程序中的任何String对象,说它是gbk还是utf-8都是错的,gbk和utf-8是编码格式而不是编码,String在内存中不需要“编码格式”(记住编码格式是在存文件或序列化的时候使用的), 它只是一个unicode的字符串而已
所以ja里面String是不带编码格式的,而String.toByteArray(charsetName)得到的byteArray是带编码格式的,格式就是你传入的'charsetName',我们不妨把toByteArray的这个过程叫做“编码”;另外,new String(byte[], charsetName)是把一个byte数组(带编码格式)以charsetName指定的编码格式翻译为一个不带编码格式的String对象,我们不妨把这个过程叫“解码”
那么根GBK 据我揣测提问者的意图,可能有2种问法是他真正想问的:
,如何把一个被错误地当作是gbk格式存储的utf-8格式的文件里面读出来的一段乱码字符串还原回去(也就是说本来二进制数据是utf-8的,你用gbk来解码它,得到的字符串是乱码,现在想要还原回去)
如果是种意图那就:
public static void main(String... args) throws Throwable {
String errStr = "errStr";
System.out.pr字节 计算机中存储数据的单元,一个8位的二进制数,是一个很具体的存储空间。 0x01, 0x45, 0xFA, ……intln(recover(errStr));
}public static String recover(String str) throws Throwable {
return new String(str.getBytes("GBK"), "UTF-8");
如果是第二种意图,那就用InputStream以gbk格式将文件读到内存里(表示为String),再将这个String以UTF-8编码写入目标文件里,具体请参考InputStream/OutputStream的api
ja字符串处理问题
(占10字节)编码问题,换成utf-8应该就没事了。
目前,GBK编解码支持已经merge回作者的iconv-lite,并和作者商量修改了接口名字。感兴趣的同学可以这样使用:BufferedReUTF8,UTF16,UTF32ader in = new BufferedReader(new InputStreamReader(System.in));
改为
ja中GBK编码格式转成UTF8,用一段方法实现怎么做
在UTF-32编码中,世界上任何字符的存储都需要4个字节。unicode是一种“编码”,所谓编码就是一个编号(数字)到字符的一种映射关系,就仅仅是一种一对一的映射而已,可以理解成一个很大的对应表格
字符是指计算机中使用的字母、数字、字和符号,包括:1、2、3、A、B、C、~!·#¥%……—()——+等等。GBK、UTF-8是一种“编码格式”,是用来序列化或存储1中提到的那个“编号(数字)”的一种“格式”;GBK和UTF-8都是用来序列化或存储unicode编码的数据的,但是分别是2种不同的格式; 他们俩除了格式不一样之外,他们所关心的unicode编码范围也不一样,utf-8考虑了很多种不同的字符,涵盖整个unicode码表,所以其存储一个字符的编码的时候,使用的字节长度也从1字节到4字节不等;而GBK只考虑中文——在unicode中的一小部分——的字符,的编码,所以它算好了只要2个字节就能涵盖到绝大多数常用中文(2个字节能表示6w多种字符),所以它存储一个字符的时候,所用的字节长度是固定的;
上述2个概念不懂的请马上google,下面不再赘述;我下面说说这个问题本身...的问题在哪里
首先ja的string使用的编码是unicode,但是,当string存在于内存中时(也就是当程序运行时、你在代码中用string类型的引用对它进行作时、也就是string没有被存在文件中且也没有在网络中传输(序列化)时),是“只有编码而没有编码格式的”,所以ja程序中的任何String对象,说它是gbk还是utf-8都是错的,gbk和utf-8是编码格式而不是编码,String在内存中不需要“编码格式”(记住编码格式是在存文件或序列化的时候使用的), 它只是一个unicode的字符串而已
所以ja里面String是不带编码格式的,而String.toByteArray(charsetName)得到的byteArray是带编码格式的,格式就是你传入的'charsetName',我们不妨把toByteArray的这个过程叫做“编码”;另外,new String(byte[], charsetName)是把一个byte数组(带编码格式)以charsetName指定的编码格式翻译为一个不带编码格式的String对象,我们不妨把这个过程叫“解码”
那么}其中errStr就是乱码字符串,按照相反的顺序在编码(用gbk)、解码(用utf-8)回去,就能得到正确的字符串(其实不保证所有情况均能正确还原,只能说大部分都能,要看你在乱码过程中是否有数据被丢失)根据我揣测提问者的意图,可能有2种问法是他真正想问的:
,如何把一个被错误地当作是gbk格式存储的utf-8格式的文件里面读出来的一段乱码字符串还原回去(也就是说本来二进制数据是utf-8的,你用gbk来解码它,得到的字符串是乱码,现在想要还原回去)
如果是种意图那就:
public static void main(String... args) throws Throwable {
String errStr = "errStr";
System.out.println(recover(errStr));
}public static String recover(String str) throws Throwable {
return new String(str.getBytes("GBK"), "UTF-8");
如果是第二种意图,那就用InputStream以gbk格式将文件读到内存里(表示为String),再将这个String以UTF-8编码写入目标文件里,具体请参考InputStream/OutputStream的api
express app.js怎么抓取非utf-8编码格式的页面或js
理解了上面几点后,编解码GBK文件其实只需要一个GBK-->Unicode的码表就够了。GBK编码时,通过linux环境下,我们可以通过 iconv 这个C++模块来处理Node.JS不支持的字符编码,如GBK,BIG5。
之前对字符编码的认识我只停留在API转换阶段,对于Unicode、UTF8和GBK之间的关系和其内部转换原理则非常模糊。比如,使用JAVA代码转换UTF8编码到GBK编码:iconv需要依赖native库,这样一来,在一些不支持native模块安装的虚拟主机和windows平台上,我们还是无法安心处理GBK编码。Google之,发现有老外写了一个通过纯Jascript转换编码的模块 iconv-lite ,不过仅支持少许单字节编解码。这个模块的初衷和我一致并且代码组织结构优雅,于是在github上fork了该项目准备支持GBK的编解码。这里是fork的项目。
通过这些资料,基本弄清楚了以下几点:String gbkString = new String(utf8String.getBytes("UTF8"), "GBK");
为了编写iconv-lite模块的gbk支持,不得不再一次学习字符编码原理,是的非常系统的学习资料:
Unicode
基本多文种平面
Unicode是全用编码
GBK也是Unicode的实现方式之一,总共23940个编码,编码范围可见下图:
UTF8与GBK进行转换,可以把Unicode作为中间编码。
UTF8编解Unicode规则简单,参见 UTF8
GBK编解Unicode无特定规则,一般可通过查表方式
Unicdoe-->GBK,生成相应的GBK字节流;GBK解码时,通过GBK-->Unicode,生成UCS2字节流,再通过
npm install iconv-lite
var iconv = require('iconv-lite');
var str = iconv.decode(buf, 'GBK'); //return unicode string from GBK encoded bytes
var buf = iconv.encode(str, 'GBK');//return GBK encoded bytes from unicode string
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系 836084111@qq.com 删除。