Java里面String的编码问题
Java里面内置字符串全部是utf-16编码,详细的编码方式看这里
import java.nio.charset.Charset;
import java.util.Arrays;
import java.util.Map; public class String2Bytes {
public static void main(String[] args) {
String str = "\u005Bab我";
Map<String, Charset> charsetMap = Charset.availableCharsets();
for(String charsetName : charsetMap.keySet()) {
System.out.println(charsetName + ":" + charsetMap.get(charsetName));
}
System.out.println(str.charAt());
//String的getBytes()方法是得到一个字串的字节数组,这是众所周知的。
//但特别要注意的是,本方法将返回该操作系统默认的编码格式的字节数组。
//如果你在使用这个方法时不考虑到这一点,你会发现在一个平台上运行良好的系统,放到另外一台机器后会产生意想不到的问题。
System.out.println(Arrays.toString(str.getBytes())); //附加级别的字符
char[] c = Character.toChars(Integer.parseInt("1D306", ));
String str1 = new String(c);
System.out.println(str1);
//附加级别的字符占用了2个代码单元
System.out.println(c.length);
System.out.println(str1.length());
//但是只占用一个代码点
System.out.println(str1.codePointCount(, str1.length())); //访问第一个代码单元,这种做法是错误的
System.out.println(str1.charAt()); //查看保存在内存里的方式
/*
* 算法
* H = Math.floor((c-0x10000) / 0x400)+0xD800
* L = (c - 0x10000) % 0x400 + 0xDC00
*/
System.out.println(Integer.toString((int)str1.charAt(), ));//0xD834
System.out.println(Integer.toString((int)str1.charAt(), ));//0xDF06 //访问第一个代码点,正确的做法
int index = str1.offsetByCodePoints(, );
System.out.println(str1.codePointAt(index)); String str2 = str1 + "abc";
//顺序访问一个String正确的方式
int count = str2.codePointCount(, str2.length());
for(int i=; i < count; ++i) {
int index1 = str2.offsetByCodePoints(, i);
int cp = str2.codePointAt(index1);
System.out.print(Character.toChars(cp));
}
System.out.println();
}
}
Java里面String的编码问题的更多相关文章
- java.lang.String.getBytes(String charsetName)方法实例
java.lang.String.getBytes(String charsetName) 方法编码将此String使用指定的字符集的字节序列,并将结果存储到一个新的字节数组. 声明 以下是java. ...
- OC与c混编实现Java的String的hashcode()函数
首先,我不愿意大家需要用到这篇文章里的代码,因为基本上你就是被坑了. 起因:我被Java后台人员坑了一把,他们要对请求的参数增加一个额外的字段,字段的用途是来校验其余的参数是否再传递过程中被篡改或因为 ...
- Java IO4:字符编码
前言 字符编码,这本不属于IO的内容,但字节流之后写的应该是字符流,既然是字符流,那就涉及一个"字符编码的"问题,考虑到字符编码不仅仅是在IO这块,Java中很多场景都涉及到这个概 ...
- java和linux的编码
最近要使用中科院计算所的关键词工具NLPIR,用java调用,在windows下测试后放到linux下跑,就发现会有乱码. windows下默认是GBK,linux下是utf-8,因此在意料之中(尽管 ...
- NDK(14)Native的char*和Java的String相互转换
转自: http://www.cnblogs.com/canphp/archive/2012/11/13/2768937.html 首先确保C/C++源文件的字符编码是UTF-8与JAVA的class ...
- java中的url 编码与解码
什么是application/x-www-form-urlencoded字符串? 答:它是一种编码类型.当URL地址里包含非西欧字符的字符串时,系统会将这些字符转换成application/x-www ...
- 【JAVA编码专题】 JAVA字符编码系列三:Java应用中的编码问题
这两天抽时间又总结/整理了一下各种编码的实际编码方式,和在Java应用中的使用情况,在这里记录下来以便日后参考. 为了构成一个完整的对文字编码的认识和深入把握,以便处理在Java开发过程中遇到的各种问 ...
- java中的字符编码方式
1. 问题由来 面试的时候被问到了各种编码方式的区别,结果一脸懵逼,这个地方集中学习一下. 2. 几种字符编码的方式 1. ASCII码 我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符 ...
- JAVA WEB 中的编码分析
JAVA WEB 中的编码分析 */--> pre.src {background-color: #292b2e; color: #b2b2b2;} pre.src {background-co ...
随机推荐
- Oracle之AUTHID CURRENT_USER
没有AUTHID CURRENT_USER表示定义者权限(definer rights),以定义者身份执行: 加上AUTHID CURRENT_USER表示调用者权限(invoker rights), ...
- 【记录】SQL注入过滤源码分享
$id=check_addslashes($_GET['id']);$id= preg_replace('/o*r/i',"", $id); //strip out OR (non ...
- Android百分比布局方案
百分比布局让其中的控件在指定高度,宽度,margin时使用屏幕宽高的百分比,不使用dp,px.这样一套布局可以适应多个屏幕,方便适配.如: app:layout_heightPercent=" ...
- vs2013项目停止调试后 iis express也跟着退出
解决方法:项目—>XX属性—>Web—>调试器—>取消[启用编辑并继续]
- WPF MVVM 如何在ViewModel中操作View中的控件事件
(在学习Wpf的时候,做一个小例子,想在TextBox改变后,检验合法性,并弹出提示.在找了很多贴后,发现这个小例子,抄袭过来,仅供参考. 最后也找到了适合自己例子的办法:在出发TextChanged ...
- Nodejs中使用异步流程控制Async
首先,我们都知道,Node基于事件驱动的异步I/O架构,所谓异步就是非阻塞,说白了就是一个事件执行了,我不必等待它执行完成后我才能执行下一个事件.所以在Node环境中的模块基本都是异步的,上一篇说到我 ...
- 2、Spring之AOP
AOP术语 通知:定义了切面是什么以及何时使用.除了要描述页面要完成的工作,通知还解决了何时执行这个工作的问题. 连接点:连接点是一个物理的存在.这个点可以是调用方法时.抛出异常时.甚至是修改一个字段 ...
- 阿里云 linux 系统的架构
简单说,/lib是内核级的,/usr/lib是系统级的,/usr/local/lib是用户级的. /lib/ — 包含许多被 /bin/ 和 /sbin/ 中的程序使用的库文件.目录 /usr/lib ...
- Web安全色的意义
问题: 不同的平台(Mac.PC等)有不同的调色板,不同的浏览器也有自己的调色板.这就意味着对于一幅图,显示在Mac上的Web浏览器中的图像,与它在PC上相同浏览器中显示的效果可能差别很大. 选择特定 ...
- jQuery可调整表和列宽插件-colResizable
最基本的例子 引入JS <script src="js/jquery-1.8.0.min.js" type="text/javascript">&l ...