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 ...
随机推荐
- 二叉堆(小到大)-数据结构-JavaScript版
/** * Created by caoke on 2015/11/21. */ //二叉树 特点父节点比子节点小 var Tree2=function(){ //初始化 二叉树的子元素 this.c ...
- 【Python】ACL限制结果检测
最近帮客户做ACL的限制检测,也就是客户对一些站点做了acl限制,只有省内或内网可以访问,然后让我 去验证acl做的是否正确,简单写了个粗略的脚本,分享下,不足之处日后改进(如多线程等),脚本如下: ...
- jenkins 部署应用
一,安装rpm包 安装jdk 安装jenkins 查看jdk是否安装成功 启动jenkins systemctl start jenkins 开机自启 systemctl enable jenkins ...
- Task的一些用法总结
一.Task和多线程以及异常的捕获示例代码: static void Main(string[] args) { // 产生CancellationToken的类,该类允许使用Cancel方法终止线程 ...
- BlackLowKey主题CSS
/* Minification failed. Returning unminified contents. (151,61): run-time error CSS1062: Expected se ...
- python的传递实参
你经常会发现,向函数传递列表很有用,这种列表包含的可能是名字.数字或更复杂的对象(如字典).将列表传递给函数后,函数就能直接访问其内容 1.在函数中修改列表 将列表传递给函数后,函数就可对其进行修改. ...
- vba SpecialCells(Type,Value) 参数说明
Range.SpecialCells 方法可以返回一个 Range 对象,该对象代表与指定类型和值匹配的所有单元格. 其语法如下: 表达式.SpecialCells(Type,Value) 其Type ...
- 从零开始的全栈工程师——MySQL数据库( Dos命令 ) ( phpstudy )
MySQL是一个关系型数据库,存在表的概念.结构,数据库可以存放多张表,每个表里可以存放多个字段,每个字段可以存放多个记录. phpstudy使用终端打开数据库的命令行 密码: root 数据库 查看 ...
- 【Android】9.0活动的生命周期(二)——实际代码演示
1.0 新建一个项目ActivityLifeCycleTest. 新建两个活动NormalActivity和DialogActivity,勾选“Generate Layout File”. 文件目录 ...
- Iscrool下拉刷新
简易下拉刷新 css样式: *{ margin: 0px; padding: 0px; } #wrapper{ width: 100%; height: 150px; border: 1px soli ...