`
liuguxing
  • 浏览: 92931 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

java unicode utf-8 String.getBytes

 
阅读更多
Unicode(统一码、万国码、单一码)是一种在计算机上使用的字符编码。它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。1990年开始研发,1994年正式公布。随着计算机工作能力的增强,Unicode也在面世以来的十多年里得到普及。
unicode utf-8转换
在Unicode中:汉字“字”对应的数字是23383。在Unicode中,我们有很多方式将数字23383表示成程序中的数据,包括:UTF-8、UTF-16、UTF-32。UTF是“UCS Transformation Format”的缩写,可以翻译成Unicode字符集转换格式,即怎样将Unicode定义的数字转换成程序数据。例如,“汉字”对应的数字是0x6c49和0x5b57,而编码的程序数据是:
  BYTE data_utf8[] = {0xE6, 0xB1, 0x89, 0xE5, 0xAD, 0x97}; // UTF-8编码
  WORD data_utf16[] = {0x6c49, 0x5b57}; // UTF-16编码
  DWORD data_utf32[] = {0x6c49, 0x5b57}; // UTF-32编码
  这里用BYTE、WORD、DWORD分别表示无符号8位整数,无符号16位整数和无符号32位整数。UTF-8、UTF-16、UTF-32分别以BYTE、WORD、DWORD作为编码单位。“汉字”的UTF-8编码需要6个字节。“汉字”的UTF-16编码需要两个WORD,大小是4个字节。“汉字”的UTF-32编码需要两个DWORD,大小是8个字节。根据字节序的不同,UTF-16可以被实现为UTF-16LE或UTF-16BE,UTF-32可以被实现为UTF-32LE或UTF-32BE。下面介绍UTF-8、UTF-16、UTF-32、字节序和BOM。
  UTF-8
  UTF-8以字节为单位对Unicode进行编码。从Unicode到UTF-8的编码方式如下:
  Unicode编码(16进制) ║ UTF-8 字节流(二进制)
  000000 - 00007F ║ 0xxxxxxx
  000080 - 0007FF ║ 110xxxxx 10xxxxxx
  000800 - 00FFFF ║ 1110xxxx 10xxxxxx 10xxxxxx
  010000 - 10FFFF ║ 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
  UTF-8的特点是对不同范围的字符使用不同长度的编码。对于0x00-0x7F之间的字符,UTF-8编码与ASCII编码完全相同。UTF-8编码的最大长度是4个字节。从上表可以看出,4字节模板有21个x,即可以容纳21位二进制数字。Unicode的最大码位0x10FFFF也只有21位。
  例1:“汉”字的Unicode编码是0x6C49。0x6C49在0x0800-0xFFFF之间,使用用3字节模板了:1110xxxx 10xxxxxx 10xxxxxx。将0x6C49写成二进制是:0110 1100 0100 1001, 用这个比特流依次代替模板中的x,得到:11100110 10110001 10001001,十六进制E6 B1 89,转换成10进制就是230 177 137.
String.getBytes()的结果是怎么得到的呢? 上面结果是unsigned char,用-(256-x)再转换成signed char就是-26, -79, -119,也就是String.getBytes()的结果了

汉字的Utf8编码都是三字节的,即:
000800 - 00FFFF ║ 1110xxxx 10xxxxxx 10xxxxxx
三个字节中最小值为128,转换成signed char就是负数了,所以汉字的String.getBytes()得到的一定是负数
分享到:
评论

相关推荐

    commons-codec-1.14.jar

    public static String Encrypt(String sSrc, String sKey) throws Exception { if (sKey == null) { System.out.print("Key为空null"); return null; } // 判断Key是否为16位 if (sKey.length() != 16)...

    jedis-2.9.0.jar

    public static void main(String[] args) { Jedis jedis = new Jedis("115.159.100.66", 16325); jedis.auth("192.168akeiekekKKDJEikekEJkeu^&&%%$&#*($#&^$&^#$*((BNGGyjekeuh{}jejekekej:"); ping...

    GBK与UTF-8之间的转换

    但是,这种方法存在一些问题,例如,使用new String(tmp.getBytes("GBK"), "UTF-8")这种方法将GBK编码的字符串转换成UTF-8编码的字符串时,可能会出现乱码的问题。 出现这种问题的原因是,因为客户端使用GBK编码,...

    ganymed-ssh2-build210.jar java远程访问linux服务器操作、上传下载文件

    private static String DEFAULTCHART="UTF-8"; protected static org.apache.log4j.Logger log = org.apache.log4j.Logger.getLogger(ScpClient.class); static private ScpClient instance; private ...

    CS结构的TCP服务器-Java代码.rar

    CS结构的TCP服务器-Java代码,TCP服务器端代码如下:  public class SocketServerDemo{  int port=2345; //端口号  ServerSocket serverSocket; //服务器套接字  public SocketServerDemo(){  try{   ...

    JS实现对中文字符串进行utf-8的Base64编码的方法(使其与Java编码相同)

    本文实例讲述了JS实现对中文字符串...String encodeStr = new String(Base64.encode(sql.getBytes(UTF-8))); // 编码 System.out.println(encodeStr); 得到: c2VsZWN0IOeUqOaIt+WQjSBmcm9tIOeUqOaItw== 在Java中

    Java语言程序设计(第3版)第06章-字符串.pptx

    6.1.1 字符串转换为数组 Java语言程序设计(第3版) char[] toCharArray() byte[] getBytes() Java语言程序设计(第3版)第06章-字符串全文共31页,当前为第8页。 6.1.1 字符串比较 Java语言程序设计(第3版) 不能使用"=...

    一个完整可用的证书签名(验签),加密(解密)java源码

    String sign = CertificateUtils.signToBase64(data.getBytes("utf-8"), keyStorePath, alias, password); System.out.println("私钥签名:" + sign); boolean status = CertificateUtils.verifySign(data....

    C#(.net)中按字节数截取字符串最后出现乱码问题的解决

    前言 最近需要用到按字节数截取字符串。在网上找了很多方法。... string msg= Encoding.UTF8.GetString(Encoding.UTF8.GetBytes(strcode)); 例子:2 string strcode=我是小明; byte[] buffer=Encoding.UTF8.Ge

    DownLoadUtil.java

    " + base64Encoder.encode(filename.getBytes("utf-8")) + "?=";*/ //java9 版本使用如下base64方式进行编码 filename = "=?utf-8?B?" + Base64.getEncoder().encodeToString(filename.getBytes("utf-8...

    智能识别收货地址Java.pdf

    } sb.append(String.format("%s=%s", URLEncoder.encode(entry.getKey().toString(), "UTF-8"), URLEncoder.encode(entry.getValue().toString(), "UTF-8") )); } return sb.toString(); } public static void main...

    C#-DES_SAME_JAVA-DES.zip

    public static String desEncrypt(String source, String desKey) throws Exception { try { // 从原始密匙数据创建DESKeySpec对象 SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES"); ...

    excel-template-export.rar

    filename=" + new String((fileName + ".xls").getBytes(), "iso-8859-1")); //将文件输出到页面 ServletOutputStream out = response.getOutputStream(); bis = new BufferedInputStream(inputStream); bos = ...

    tts_java_demo (1).zip

    String paramBase64 = new String(Base64.encodeBase64(param.getBytes("UTF-8"))); String checkSum = DigestUtils.md5Hex(API_KEY + curTime + paramBase64); Map<String, String> header = new HashMap<String...

    Java中的String类getBytes()方法详解与实例

    在本文中,我们学习了Java String类的getBytes()方法,它允许将字符串转换为字节数组,并且可以指定字符编码方式。通过实例和代码演示了使用平台默认字符编码和指定UTF-8、ISO-8859-1字符编码的情况。getBytes()方法...

    史上最全的java基础总结大全

    byte[] buf2 = str2.getBytes("UTF-8");//指定解码:UTF-8,六个字节 //编码解码3:编码正确解码错误 String str3 = "你好"; byte[] buf3 = str3.getBytes("GBK");//指定编码:GBK,四个字节 String str3 = ...

    ISO8583各域详解--整理版.doc

    BINARY采用二进制编码(8位二进制数编码为一个字节)。 CHAR、LLVAR、LLLVAR为ASC(即正常的getBytes(Encoding))编码。 NUMERIC、LLLVAR_NUMERIC采用BCD(半个字节表示一个10进制数,每两位编码为一个字节)编码。 CHAR...

    AESUtil AES的加密和解密java工具类

    AESUtil AES的加密和解密java工具类 aes解密 aes加密 KeyGenerator kgen = KeyGenerator.getInstance("AES"); kgen.init(128); Cipher cipher = Cipher.... return cipher.doFinal(content.getBytes("utf-8"));

    ASP.NET 对文件进行在线压缩并下载

    string filename = HttpUtility.UrlEncode(System.Text.UTF8Encoding.UTF8.GetBytes(Path.GetFileName(filepath))); Response.Clear(); Response.AddHeader("content-type", "application/x-msdownload;"); ...

    国密算法SM4纯java代码实现

    国密算法SM4纯java代码实现,支持: SM4Enc_ECB(str.getBytes(), key.getBytes()); SM4Dec_ECB(bts,key.getBytes()); SM4Enc_CBC(str.getBytes(),iv.getBytes(), key.getBytes()); SM4Dec_CBC(bts,iv.getBytes(),key...

Global site tag (gtag.js) - Google Analytics