import java.util.HashMap;
import java.util.Map;
/**
* 创建日期: 2014-04-18 10:36:25
* 作者: 黄飞
* mail:huangfei8087@163.com 834865081@qq.com
* ©版权归作者全部
* */
public class ConverFromGBKToUTF8 {
public static void main(String[] args) {
try {
ConverFromGBKToUTF8 convert = new ConverFromGBKToUTF8();
String fullStr = convert.gbk2utf8("半角变拳脚,quanjiao ");
System.out.println( fullStr ) ;
} catch (Exception e) {
e.printStackTrace();
}
}
private StringUtil chinese(String chinese){
StringUtil util = new StringUtil();
char[]chars = chinese.toCharArray() ;
int index = 0 ;
StringBuffer buffer = new StringBuffer();
for(char c : chars){
String temp = String.valueOf(c) ;
if(temp.getBytes().length == 1){
util.map.put( index , temp ) ;
}else{
buffer.append( temp );
}
index++;
}
util.chinese = buffer.toString() ;
return util ;
}
public String gbk2utf8(String chenese) {
StringUtil strUtil = chinese( chenese ) ;
char c[] = strUtil.chinese.toCharArray( ) ;
byte[] fullByte = new byte[3 * c.length];
for (int i = 0; i < c.length; i++) {
int m = (int) c[i];
String word = Integer.toBinaryString(m);
StringBuffer sb = new StringBuffer();
int len = 16 - word.length();
for (int j = 0; j < len; j++) {
sb.append("0");
}
sb.append(word);
sb.insert(0, "1110");
sb.insert(8, "10");
sb.insert(16, "10");
String s1 = sb.substring(0, 8);
String s2 = sb.substring(8, 16);
String s3 = sb.substring(16);
byte b0 = Integer.valueOf(s1, 2).byteValue();
byte b1 = Integer.valueOf(s2, 2).byteValue();
byte b2 = Integer.valueOf(s3, 2).byteValue();
byte[] bf = new byte[3];
bf[0] = b0;
fullByte[i * 3] = bf[0];
bf[1] = b1;
fullByte[i * 3 + 1] = bf[1];
bf[2] = b2;
fullByte[i * 3 + 2] = bf[2];
}
String reutrnStr = null ;
try {
reutrnStr = new String(fullByte, "UTF-8");
} catch (Exception e) {
}
StringBuffer returnBuffer = new StringBuffer( reutrnStr );
for(Map.Entry<Integer, String> entry : strUtil.map.entrySet()){
returnBuffer.insert(entry.getKey() , entry.getValue() ) ;
}
return returnBuffer.toString() ;
}
}
class StringUtil{
public String chinese ;
public Map<Integer , String> map = new HashMap<Integer, String>();
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
2015-03-28 【Web优化】Yslow优化法则(四)启用Gzip压缩
2015-03-28 中石化牵手腾讯 背后隐藏了啥秘密?
2015-03-28 hdu 1420(Prepared for New Acmer)(中国剩余定理)(降幂法)
2015-03-28 vi 命令 使用方法
2015-03-28 STL vector使用方法介绍
2015-03-28 关于 Head First SQL 中文版
2015-03-28 XSS攻击及防御