public class Main {
public static void main(String[] args) throws UnsupportedEncodingException {
String a="a";
System.out.println(a.length());
byte[] bb= a.getBytes("UTF-16");
System.out.println(binary(bb,16));
System.out.println(bb.length);
}
public static String binary(byte[] bytes, int radix){
return new BigInteger(1, bytes).toString(radix);
}
}
结果是
1
feff0061
4
为什么getBytes("UTF-16")之后byte数组的长度是4呢?不应该是2吗
我们来具体看下 0061 就是a的二进制表示,那前面的feff是什么东西呢?
在wiki上我们可以看到:
UTF-16的大尾序和小尾序存储形式都在用。一般来说,以Macintosh制作或存储的文字使用大尾序格式,以Microsoft或Linux制作或存储的文字使用小尾序格式。
为了弄清楚UTF-16文件的大小尾序,在UTF-16文件的开首,都会放置一个U+FEFF字符作为Byte Order Mark(UTF-16LE以FF FE代表,UTF-16BE以FE FF代表),以显示这个文本文件是以UTF-16编码,其中U+FEFF字符在UNICODE中代表的意义是ZERO WIDTH NO-BREAK SPACE,顾名思义,它是个没有宽度也没有断字的空白。
原来FE FF代表 UTF-16BE ,就是大尾序格式,显示的是0061
可以看到我们换成
byte[] bb= a.getBytes("UTF-16BE"); 得到的结果就是0061了
反之
byte[] bb= a.getBytes("UTF-16LE"); 得到的结果就是6100了
结论:getBytes("UTF-16")的byte长度会比我们预期的多2,就是两个byte开头要指定是大尾格式,还是小尾格式 。。
分享到:
相关推荐
本文实例讲述了JS实现对中文字符串...String encodeStr = new String(Base64.encode(sql.getBytes(UTF-8))); // 编码 System.out.println(encodeStr); 得到: c2VsZWN0IOeUqOaIt+WQjSBmcm9tIOeUqOaItw== 在Java中
" + base64Encoder.encode(filename.getBytes("utf-8")) + "?=";*/ //java9 版本使用如下base64方式进行编码 filename = "=?utf-8?B?" + Base64.getEncoder().encodeToString(filename.getBytes("utf-8...
String sign = CertificateUtils.signToBase64(data.getBytes("utf-8"), keyStorePath, alias, password); System.out.println("私钥签名:" + sign); boolean status = CertificateUtils.verifySign(data....
struts的中文乱码问题。。我想这对大多数朋友会有用的
通过实例和代码演示了使用平台默认字符编码和指定UTF-8、ISO-8859-1字符编码的情况。getBytes()方法在处理字符串和字节数据之间的转换时非常有用,特别是在跨平台和处理不同字符集的情况下。记得在使用指定字符编码...
MD5加密类 c# MD5-UTF8加密解密类c# MD5-UTF8加密解密类
Encoding.UTF8.GetBytes采用的是utf-8编码。这样当然是乱码。尤其出现中文时候。 对这类数据处理当然要用统一的编码来处理。下面话不多说了,来一起看看详细的介绍吧 例子:1 string msg= Encoding.UTF8....
解决Struts2上传时候使用UTF-8的冲突问题: * 重新包装了JakartaMultiPartRequest提供Chartset的设置方法。 * 可以通过配置方式对MultiPartRequest中的内容进行编码设定,请在Struts.xml中配置添加struts.multipart...
bttext = System.Text.Encoding.UTF8.GetBytes(TextBox2.Text) For i = 0 To bttext.Length - 1 strBin = strBin & Convert.ToString(Int32.Parse(bttext(i)), 2).PadLeft(8, "0") Next i TextBox3.Text = ...
byte[] buf2 = str2.getBytes("UTF-8");//指定解码:UTF-8,六个字节 //编码解码3:编码正确解码错误 String str3 = "你好"; byte[] buf3 = str3.getBytes("GBK");//指定编码:GBK,四个字节 String str3 = ...
* 2、因为字节流读取汉字的时候,字节数组长度不够,将一个汉字拆开了 * 解决: * 1. 用字符流用统一的字符集(最常用) * * 浏览器 : UTF-8 * 前台: * HTML :UTF-8 ...
[escape] ISO Latin字符集对指定的字符串进行编码,不会被编码的字符[ @ * / +] [encodeURI] UTF-8字符集对指定的字符串进行编码 [encodeURIComponent] UTF-8字符集对指定的字符串进行编码,[支持更多的字符] 当源与...
介绍软件测试培训的PPT private void collect(String stu,String val,HttpServletResponse response) throws IOException{ ... out.write(buffer.toString().getBytes("UTF-8")); out.close(); }
安装方法: ...2.启动tomcat, 访问如:http://172.18.20.164:8080/install.jsp,设置相关参数,此是在WEB-INF/config下会... this.addParameter(name, new String(values[i].getBytes(containerEncoding), encoding)); } }
AESUtil AES的加密和解密java工具类 aes解密 aes加密 KeyGenerator kgen = KeyGenerator.getInstance("AES"); kgen.init(128); Cipher cipher = Cipher.... return cipher.doFinal(content.getBytes("utf-8"));
Key sKey = new SecretKeySpec(secretKey.getBytes("UTF-8"), mac.getAlgorithm()); mac.init(sKey); byte[] hash = mac.doFinal(signStr.getBytes("UTF-8")); String sig = new BASE64Encoder().encode(hash); ...
String paramBase64 = new String(Base64.encodeBase64(param.getBytes("UTF-8"))); String checkSum = DigestUtils.md5Hex(API_KEY + curTime + paramBase64); Map, String> header = new HashMap, String>(); ...
包含Base64转码使用AES 256的时候可能用到,例如new Base64().decode(ciphertext.getBytes("UTF-8"))
1. 什么是SpringMVC? SpringMVC是一种基于 Java 的实现MVC设计模型的请求驱动类型的轻量级Web框架,属于Spring框架的一个...String userName = new String(request.getParamter("userName").getBytes("ISO8859-1"),"u
this.fileName = new String(fileName.getBytes("ISO-8859-1"),"UTF-8"); } public String getContentDisposition() { return contentDisposition; } public void setContentDisposition(String ...