前提:
英文字符在utf8编码下是1个字符
中文的utf8编码占3个字符
思路:
将字符数组转化为字符串,这是有可能最后一位是乱码的。对于计算机而言好像没什么好的办法判断最后字符是否为中文或者乱码。 我们再把该未被确认的字符串再解码为 UTF8 的字符数组,这时候你会奇怪的发现 如果最后一位是乱码的话,它会被转换为3个字符。比较字符数组的长度,后面就有很多文章可做了。
import java.io.UnsupportedEncodingException;
import org.junit.Test;
public class StringTest {
@Test
public void test() throws UnsupportedEncodingException{
String str = "hello,我是谁";
byte[] bs = str.getBytes("UTF-8");
printInfo(bs);
//104 101 108 108 111 -17 -68 -116 -26 -120 -111 -26 -104 -81 -24 -80 -127
System.out.println(new String(bs, "UTF-8"));
byte[] bs2 = new byte[bs.length-1];
for(int i=0;i<bs.length-1;i++){
bs2[i] = bs[i];
}
//104 101 108 108 111 -17 -68 -116 -26 -120 -111 -26 -104 -81 -24 -80
printInfo(bs2);
//hello,我是�
String str2 = new String(bs2, "UTF-8");
System.out.println(str2);
//104 101 108 108 111 -17 -68 -116 -26 -120 -111 -26 -104 -81 -17 -65 -67
byte[] bs3 = str2.getBytes("UTF-8");
printInfo(bs3);
System.out.println("");
if(bs2.length!=bs3.length){
//hello,我是
System.out.println(str2.substring(0, str2.length()-1));
int leftLen = 3 - (bs3.length - bs2.length);
byte lefted[] = new byte[leftLen];
for(int i =0; i < leftLen ; i++){
lefted[i] = bs2[bs2.length-1-i];
}
printInfo(lefted);
}
}
private void printInfo(byte[] bs){
System.out.println(bs.length+":");
for(int i=0;i<bs.length;i++){
System.out.print(bs[i]+" ");
}
}
}
分享到:
相关推荐
Java日期选择控件完整源代码 14个目标文件 内容索引:JAVA源码,系统相关,日历,日期选择 Java语言开发的简洁实用的日期选择控件,源码文件功能说明: [DateChooser.java] Java 日期选择控件(主体类) [public] ...
Java日期选择控件完整源代码 14个目标文件 内容索引:JAVA源码,系统相关,日历,日期选择 Java语言开发的简洁实用的日期选择控件,源码文件功能说明: [DateChooser.java] Java 日期选择控件(主体类) [public] ...
Java日期选择控件完整源代码 14个目标文件 内容索引:JAVA源码,系统相关,日历,日期选择 Java语言开发的简洁实用的日期选择控件,源码文件功能说明: [DateChooser.java] Java 日期选择控件(主体类) [public] ...
Java日期选择控件完整源代码 14个目标文件 内容索引:JAVA源码,系统相关,日历,日期选择 Java语言开发的简洁实用的日期选择控件,源码文件功能说明: [DateChooser.java] Java 日期选择控件(主体类) [public] ...
Java日期选择控件完整源代码 14个目标文件 内容索引:JAVA源码,系统相关,日历,日期选择 Java语言开发的简洁实用的日期选择控件,源码文件功能说明: [DateChooser.java] Java 日期选择控件(主体类) [public] ...
Java日期选择控件完整源代码 14个目标文件 内容索引:JAVA源码,系统相关,日历,日期选择 Java语言开发的简洁实用的日期选择控件,源码文件功能说明: [DateChooser.java] Java 日期选择控件(主体类) [public] ...
constCharExample.java 演示转义字符 converseNumber.java 逆向输出数字 daffodilNumber.java 求水仙花数 division.java 演示整除结果 errorCompoundVariable.java 错误使用局部变量示例 factorial.java 求...
Pinyin4j是一个流行的Java库,支持中文字符和拼音之间的转换。拼音输出格式可以定制。 异步HTTP客户端开发包 HttpAsyncClient HttpAsyncClient 是一个异步的 HTTP 客户端开发包,基于 HttpCore NIO 和 HttpClient ...
Java日期选择控件完整源代码 14个目标文件 内容索引:JAVA源码,系统相关,日历,日期选择 Java语言开发的简洁实用的日期选择控件,源码文件功能说明: [DateChooser.java] Java 日期选择控件(主体类) [public] ...
Java日期选择控件完整源代码 14个目标文件 内容索引:JAVA源码,系统相关,日历,日期选择 Java语言开发的简洁实用的日期选择控件,源码文件功能说明: [DateChooser.java] Java 日期选择控件(主体类) [public] ...
正如上面说的,正则表达式看起来非常复杂,让人害怕,大多数的PHP初学者都会跳过这里,继续下面的学习,但是PHP中的正则表达式有着可以利用模式匹配找到符合条件的字符串、判断字符串是否合乎条件或者用指定的字符...
锁可以保证事务的完整性和并发性。 什么是视图?游标是什么? 答:视图是一种虚拟的表,具有和物理表相同的功能。游标是对查询出来的结果集作为一个单元来有效的处理,可以对结果集的当前行做修改。 select执行顺序? ...
下列完整性,不属于关系型数据库三类完整性规则的是( ) 。 A. 实体完整性 B. 数据完整性 C. 参照完整性 D. 用户定义完整性 ----------------- 选择:B 4. 下列哪个类是 Applet 类的直接父类( ) 。 A. Component...
当用户输入注册信息时,本系统提供了基本的客户端验证,来判断用户输入的合法性,只有当用户的输入满足系统的要求时,才会将用户输入的数据提交到服务器端负责处理注册信息的Action。在注册Action成功处理完用户...
java版斗地主源码 EasyPR EasyPR是一个开源的中文车牌识别系统,其目标是成为一个...在车牌判断模块中,使用了新的SVM特征(颜色+投影),从而在保持鲁棒性的同时,提升了正确率。定位指标中FScore从76%提升到82%. 新
java版斗地主源码 EasyPR EasyPR是一个开源的中文车牌识别系统,其目标是成为一个...在车牌判断模块中,使用了新的SVM特征(颜色+投影),从而在保持鲁棒性的同时,提升了正确率。定位指标中FScore从76%提升到82%. 新
Java开发技术大全 电子版 第1篇Java基础知识入门. 第1章Java的开发运行环境2 1.1Java的运行环境与虚拟机2 1.2Java的开发环境4 1.2.1JDK的安装4 1.2.2如何设置系统环境变量6 1.2.3编译命令的使用8 1.2.4解释...