由于项目需要, 需要把GBK编码的字符串转成UTF-8编码, 网上随手搜了一下, 找到些样例代码, 可以用, 不过很恶心, 竟然把字符数值转成二进制的字符串形式进行操作, 于是自己动手根据编码规则用位操作写了一个...也没几行...有时还真不能太懒...
import java.io.UnsupportedEncodingException;
/**
* @author GChan
*
*/
public class CharacterEncodeConverter {
/**
* The main method.
*
* @param args
* the arguments
*/
public static void main(String[] args) {
try {
CharacterEncodeConverter convert = new CharacterEncodeConverter();
byte[] src = new byte[5];
src[0] = (byte) 0xD6;
src[1] = (byte) 0xD0;
src[2] = (byte) 0x32;
src[3] = (byte) 0xCE;
src[4] = (byte) 0xC4;
byte[] fullByte = convert.gbk2utf8byte(new String(src, "GBK"));
String fullStr = new String(fullByte, "UTF-8");
System.out.println("string from GBK to UTF-8 byte: " + fullStr);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* gbk2utf8byte.
*
* @param chinese
* the chinese
*
* @return the byte[]
*/
public byte[] gbk2utf8byte(String chinese) {
// Step 1: 得到GBK编码下的字符数组,一个中文字符对应这里的一个c[i]
char c[] = chinese.toCharArray();
// Step 2: UTF-8使用3个字节存放一个中文字符,假设全部为中文,则最大长度为字符数年的3倍
byte[] fullByte = new byte[3 * c.length];
// Step 3: 循环将字符的编码转换成UTF-8编码
int counter = 0;
for (int i = 0; i < c.length; i++) {
// Step 3-1:将字符的ASCII编码转换成数值
int m = (int) c[i];
// ASCII 直接下一字符
if (m <= 127) {
fullByte[counter++] = (byte) m;
continue;
}
// 编码格式:1110[xxxx] 10[xxxxxx] 10[xxxxxx]
// 1110 和前四位构成第一字节
int b0 = ((m & 0xF000) >>> 12) | 0xE0;
// 10 和中间六位构成第二字节
int b1 = ((m & 0x0FC0) >>> 6) | 0x80;
// 10 和最后六位构成第三字节
int b2 = (m & 0x003F) | 0x80;
fullByte[counter++] = (byte) b0;
fullByte[counter++] = (byte) b1;
fullByte[counter++] = (byte) b2;
// 继续解析下一个中文字符
}
// 根据实际编码长度生成新数组返回
byte[] result = new byte[counter];
System.arraycopy(fullByte, 0, result, 0, counter);
return result;
}
/**
* gbk2utf8.
* @param chinese
* @return
*/
public String gbk2utf8(String chinese) {
String result = null;
try {
result = new String(gbk2utf8byte(chinese), "UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return result;
}
}
分享到:
相关推荐
不需要关心接受的字符串编码是UTF_8还是GBK,还是ios-8859-1,自动转换为utf-8编码格式,无需判断字符串原有编码,用法://处理编码String newStr = GetEncode.transcode(oldStr);
GB2312编码与utf-8编码的字符串的转换,主要使用windows api函数MultiByteToWideChar和WideCharToMultiByte,代码简洁,经测试可用
iso-8859-1转GBK,GBK转iso-8859-1,在二维码生成过程中如果没有用UTF8编码可以使用编码转换方式解决乱码问题
在eclispe的项目中,有存在项目字符集和工作空间字符集不匹配,该jar只能将项目文件中的.java结尾的文件转为utf8编码,并且源文件必须为gbk编码的,否则乱码
本工程用于研究如何使用Java代码将GBK编码格式的工程转换为UTF-8编码格式的工程 本工程编码方式:UTF-8 本工程开发工具:MyEclipse
文件包含:gbk2utf-8.bat、utf-82gbk.bat、iconv.exe及使用说明.txt四个文件 使用说明:1把要转换的所有.h和.c文件拷入该目录下,双击相应的bat文件即可。 2转换结果会保存在utf-8Res或gbkRes目录下。 3如果转换除...
idea、Eclipse等项目导入.java文件中文乱码完美解决方案:文件夹下所有GBK编码的.java一键转为utf-8,操作方式:将GBK2UTF8.jar文件考到需要转码项目目录,在当前位置运行控制台,输入命令java -jar GBK2UTF8.jar,...
用于常用编码转换,包括BREW、JAVA等语言UNICODE字符串定义格式,网页编码,GBK及UTF-8的URL编码等
当时在linux上写的代码,转到window下就全部是,自己写的一个小工具类,可以实现UTF-8与GBK之间相互转码。程序开发完后,指定路径,可以实现将文件的编码装换成自己想要的格式,里面有注释
问题 小程序接收蓝牙设备发送的信息,但是蓝牙设备发送的是gb2312...// 导入gbk转utf-8对照表 import Decoder from "../../utils/Decoder.js" 参考地址:https://blog.csdn.net/v_loading/article/details/118154963
VB(Visual Basic) UTF8 字符编码 常常使用 VB(Visual Basic) 程序 Post到其他程序时有关中文正总老是乱码、怎么也不好解决、 这里我们做了一小方法、直接先将我们要发送的中文字符转换为UTF8字符集的编码然后在发送...
关于JAVA字符编码:Unicode,ISO-8859-1,GBK,UTF-8编码及相互转换
c语言的gbk和unicode的编码对照表以及gbk和utf8的相互转换函数(比较全)。
文件编码转换(utf8与gbk相互转换) 可以将utf8(gbk)的文件转换成gbk(utf8)格式
本文实例讲述了C++实现判断一个字符串是否为UTF8或GBK格式的方法。分享给大家供大家参考,具体如下: 在处理外部数据的时候,很可能因为数据格式不一样而导致乱码,甚至导致某些程序挂掉。鉴于对多数系统来说,使用...
基于Keil的用C语言写的UTF转GBK的代码,用的查表法,字库占用41K左右Flash,可以用于将数据流中的UTF文本转化为GBK,解决串口显示或者TF或LCD显示中文乱码的问题
将一个GBK编码的文本转换为URL编码,返回一个URL编码 将一个UTF8编码的文本转换为URL编码,返回一个URL编码 易语言在线自学
Qt字符转换,串口接收数据转为中文显示可用。Qt中的字符编码转换:UTF8、Unicode、GBK、ASCII、16进制字符、16进制数值
直接在url中传递中文参数时,读到的中文都是乱码,那么我们应该怎么将这些参数转换呢,接下来与大家分享下将字符串转换成utf-8或者gb2312编码的参数的技巧
可以帮助你把中文转换成UTF-8编码形式,UTF-8编码与中文互转,同时也支持把UTF-8编码过的字符还原成中文,将字符串转换为UTF-8形式,解决在网络传输过程中出现的字符乱码,同时可跨平台使用。