中文转unicode,中文转bytes,unicode转bytes java实现

utf-8

utf-8格式的中文由三位字节组成。

UTF-8的编码规则很简单,只有二条:
1)对于单字节的符号,字节的第一位设为0,后面7位为这个符号的unicode码。因此对于英语字母,UTF-8编码和ASCII码是相同的。
2)对于n字节的符号(n>1),第一个字节的前n位都设为1,第n+1位设为0,后面字节的前两位一律设为10。剩下的没有提及的二进制位,全部为这个符号的unicode码。
下表总结了编码规则,字母x表示可用编码的位。
Unicode符号范围 | UTF-8编码方式
(十六进制) | (二进制)
--------------------+---------------------------------------------
0000 0000-0000 007F | 0xxxxxxx
0000 0080-0000 07FF | 110xxxxx 10xxxxxx
0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx
0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

1.中文转unicode

    public static String toUnicode(String s) {
        String as[] = new String[s.length()];
        String s1 = "";
        for (int i = 0; i < s.length(); i++) {
            as[i] = Integer.toHexString(s.charAt(i) & 0xffff);
            s1 = s1 + "\\u" + as[i];
        }
        return s1;
    }

2.中文转bytes

byte[] b=s.getBytes("utf-8");

3. unicode转bytes

/*
     *  unicode转到utf-8的转换过程。
     *  @param 要进行转换的汉字
     *  @return 16进制表示的汉字UTF-8编码字节序列 /
     */
    public static String unicode2utf8(char input){
        //1 Byte=8byte 16位取值范围00~ff
        //input 两个字节 16位取值范围为4E00~9FA5
        int lowByte = input & 0x00ff;
        int highByte = (input & 0xff00) >>> 8;

        // UTF-8的第1个字节是1110 + highByte高4位
        int high4inHighByte = (highByte& 0xf0) >>> 4;
        int utf8Byte1 = (7 << 5) + high4inHighByte;

        // UTF-8的第2个字节是10 + highByte低4位 + lowByte高2位
        int low4inHighByte = highByte & 0x0f;
        int high2inLowByte = (lowByte& 0xc0) >>> 6;
        int utf8Byte2 = (1 << 7) + (low4inHighByte << 2) + high2inLowByte;

        // UTF-8的第3个字节是10 + lowByte低6位
        int utf8Byte3 = (1 << 7) + (lowByte & 0x3f);
        String result = Integer.toHexString(utf8Byte1) + "," + Integer.toHexString(utf8Byte2) + ","
                + Integer.toHexString(utf8Byte3);
        return result;
    }

gbk

GBK编码,是对GB2312编码的扩展,因此完全兼容GB2312-80标准。GBK编码依然采用双字节编码方案,其编码范围:8140-FEFE,剔除xx7F码位,共23940个码位。共收录汉字和图形符号21886个,其中汉字(包括部首和构件)21003个,图形符号883个。GBK编码支持国际标准ISO/IEC10646-1和国家标准GB13000-1中的全部中日韩汉字,并包含了BIG5编码中的所有汉字。GBK编码方案于1995年12月15日正式发布,这一版的GBK规范为1.0版。

GBK 亦采用双字节表示,总体编码范围为 8140-FEFE,首字节在 81-FE 之间,尾字节在 40-FE 之间,剔除 xx7F 一条线。总计 23940 个码位,共收入 21886 个汉字和图形符号,其中汉字(包括部首和构件)21003 个,图形符号 883 个。

全部编码分为三大部分:

1. 汉字区。包括:
a. GB 2312 汉字区。即 GBK/2: B0A1-F7FE。收录 GB 2312 汉字 6763 个,按原顺序排列。
b. GB 13000.1 扩充汉字区。包括:
(1) GBK/3: 8140-A0FE。收录 GB 13000.1 中的 CJK 汉字 6080 个。
(2) GBK/4: AA40-FEA0。收录 CJK 汉字和增补的汉字 8160 个。CJK 汉字在前,按 UCS 代码大小排列;增补的汉字(包括部首和构件)在后,按《康熙字典》的页码/字位排列。
(3) 汉字“〇”安排在图形符号区GBK/5:A996。

2. 图形符号区。包括:
a. GB 2312 非汉字符号区。即 GBK/1: A1A1-A9FE。其中除 GB 2312 的符号外,还有 10 个小写罗马数字和 GB 12345 增补的符号。计符号 717 个。
b. GB 13000.1 扩充非汉字区。即 GBK/5: A840-A9A0。BIG-5 非汉字符号、结构符和“〇”排列在此区。计符号 166 个。

3. 用户自定义区:分为(1)(2)(3)三个小区。
(1) AAA1-AFFE,码位 564 个。
(2) F8A1-FEFE,码位 658 个。
(3) A140-A7A0,码位 672 个。
第(3)区尽管对用户开放,但限制使用,因为不排除未来在此区域增补新字符的可能性。

举例:

        String s="中文";
                byte[] b=s.getBytes("gbk");

bytes为

[-42, -48, -50, -60]

补码为:

【214,208,206,196】

转换为十六进展为

【D6,D0,CE,C4】

按照gbk表去查询汉字

编码完全匹配。

时间: 2024-08-29 01:39:29

中文转unicode,中文转bytes,unicode转bytes java实现的相关文章

charCodeAt方法以及Unicode中文汉字编码范围

js的charCodeAt() 方法可返回指定位置的字符的 Unicode 编码.这个返回值是 0 - 65535 之间的整数. 在字符串 "Hello world!" 中,我们将返回位置 1 的字符的 Unicode 编码: <script type="text/javascript"> var str="我是谁"; document.write(str.charCodeAt(1));//输出汉字“是”的编码(10进制) </

web前端-常见中文字体在CSS中的Unicode编码

一,常见中文字体在CSS中的Unicode编码 新细明体: \65b0\7ec6\660e\4f53 细明体: \7ec6\660e\4f53 标楷体: \6807\6977\4f53 黑体: \9ed1\4f53 宋体: \5b8b\4f53 新宋体: \65b0\5b8b\4f53 仿宋: \4eff\5b8b 楷体: \6977\4f53 仿宋_gb2312: \4eff\5b8b_gb2312 二,例如:font-family:’ \5b8b\4f53’;

unicode 中文转换

public static String getStrUnicode(String inStr) { StringBuffer unicode = new StringBuffer(); char c; int bit; String tmp = null; for (int i = 0; i < inStr.length(); i++) { c = inStr.charAt(i); if (c > 255) { unicode.append("\\u"); bit = (

Unicode字符串和非Unicode字符串

什么是Unicode? Unicode(统一码.万国码.单一码)是计算机科学领域里的一项业界标准,包括字符集.编码方案等.Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言.跨平台进行文本转换.处理的要求. 字符串? 字符串或串(String)是由数字.字母.下划线组成的一串字符.一般记为 s=“a1a2···an”(n>=0).它是编程语言中表示文本的数据类型.在程序设计中,字符串(string)为符号或数值的一个连

Python中Unicode码和非Unicode码引起的错误与格式转换

1.1. 问题 Problem You need to deal with data that doesn't fit in the ASCII character set. 你需要处理不适合用ASCII字符集表示的数据. 1.2. 解决 Solution Unicode strings can be encoded in plain strings in a variety of ways, according to whichever encoding you choose: Unicode

db 文件 查看 打开 工具 db 中文 版 navicat 中文

韩梦飞沙  韩亚飞  [email protected]  yue31313  han_meng_fei_sha ======= db 中文 版 navicat 中文 ======= NavicatforMySQL(64bit)简体中文版下载_NavicatforMy. 这个 有的db 打不开. ======

让Tomcat支持中文路径名和中文文件名

http://hdwangyi.iteye.com/blog/107709 Tomcat是Java开发者使用得较多的一个Web服务器,因为它占用资源小,运行速度快等特点,深受Java Web程序员的喜爱.不过,在使用中,由于Java中的中文问题的存在,如果不经过配置,在WEB程序中,不能直接支持具有中文文件名的文件的下载,这为Java Web程序的开发带来一定的不便.本文拟介绍一种手段,解决这个问题. 解决问题的核心在于修改Tomcat的配置,在Server.xml文件中添加一个名为URIEnc

ubuntu 中文界面下中文文件夹改英文

首先,打开终端,切换成英文环境, export LANG=en_US   接着,目录转换 xdg-user-dirs-gtk-update 最后,切换回中文环境 export LANG=zh_CN.UTF-8 大功告成.  ubuntu 中文界面下中文文件夹改英文,布布扣,bubuko.com

Python 中添加中文注释以及中文输出解释器报错的解决办法

终于知道如果文件里有非ASCII字符,需要在第一行或第二行指定编码声明.把ChineseTest.py文件的编码重新改为ANSI,并加上编码声明. 在代码的第一行 或者 第二行添加指定文件的编码类型 #-*- coding:utf-8 -*-           //添加代码类型1 #coding=utf-8         //添加代码类型2 上面两种方法随便哪一种都可以,别忘记了前面的 # . 这样代码中就可以添加中文注释 和 中文输出了. 另外提醒一句:vim 查看文件的编码类型是在命令模

中文分词技术(中文分词原理)

一.       为什么要进行中文分词? 词是最小的能够独立活动的有意义的语言成分,英文单词之间是以空格作为自然分界符的,而汉语是以字为基本的书写单位,词语之间没有明显的区分标记,因此,中文词语分析是中文信息处理的基础与关键. Lucene中对中文的处理是基于自动切分的单字切分,或者二元切分.除此之外,还有最大切分(包括向前.向后.以及前后相结合).最少切分.全切分等等. 二.       中文分词技术的分类 我们讨论的分词算法可分为三大类:基于字典.词库匹配的分词方法:基于词频度统计的分词方法