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 ...
随机推荐
- 升级TeeChart pro
teechart 安装流程如下: 1. 将生成的 LIB中的 选中文件copy到C:\Users\Public\Documents\RAD Studio\8.0\Dcp 图1 1. fastrep ...
- Transform 引起的 z-index "失效"
重新学习CSS后的第三天,学习制作阴影的过程中,发现的问题:设置了box-shadow后展现的阴影: 添加transform:rotate(10deg);后的效果: 查看CodePen例子:阴影效果 ...
- oracle 笔记---(二)
查询ASM实例包含的内存组件 SQL> select component,current_size from v$memory_dynamic_components 2 ; COMPONENT ...
- oracle 单实例DG(搭建篇一)
一,介绍 lodding... 二,安装前环境配置 01,依赖包的安装: yum install binutils-* yum install compat-libstdc++-* yum insta ...
- Spark-HBase集成错误之 java.lang.NoClassDefFoundError: org/htrace/Trace
在进行Spark与HBase 集成的过程中遇到以下问题: java.lang.IllegalArgumentException: Error while instantiating 'org.apac ...
- 【数据结构】最小生成树之prim算法和kruskal算法
在日常生活中解决问题经常需要考虑最优的问题,而最小生成树就是其中的一种.看了很多博客,先总结如下,只需要您20分钟的时间,就能完全理解. 比如:有四个村庄要修四条路,让村子能两两联系起来,这时就有最优 ...
- FZU 2122 ——又见LKity——————【KMP字符串匹配】
Problem 2122 又见LKity Accept: 413 Submit: 1425Time Limit: 1000 mSec Memory Limit : 32768 KB Pr ...
- (一)环境安装之Java
一.安装JDK 点击 JDK8下载,根据自己的平台,选择相应的版本进行下载. Java环境分JDK和JRE ,JDK就是Java Development Kit. 简单的说JDK是面向开发人员使用的S ...
- asp.net5中使用NLog进行日志记录
asp.net5中提供了性能强大的日志框架,本身也提供了几种日志记录方法,比如记录到控制台或者事件中等,但是,对大部分程序员来说,更喜欢使用类似log4net或者Nlog这种日志记录方式,灵活而强大. ...
- git每次提交都输入密码
打开gitbash执行即可 git config --global credential.helper store 长期储存密码,因为git默认是不储存密码的,不执行这条命令的话每次更新代码,或者提交 ...