实现思路大致如下:
取得一个汉字的Unicode码
把Unicode码分解为两个16进制数据字符串(丢弃前两个字节)
把这两个16进制数据字符串转换成二进制数据字符串
把二进制数据字符串分解为三个串,第一个串为4(0~4)个位,在高位加上标记位“1110”,第二(4~10)、三个(10~16)串均为6个位,分别在高位加上“10”标记位
把这三个二进制串分别转换为10进制数据并赋值给字节型数组
根据这个字节型数组构造UTF-8字符
java 代码
import java.io.File;
import java.io.FileOutputStream;
import java.io.UnsupportedEncodingException;
/**
* 2007-8-10 jyin at gomez dot com
*/
public class CharsetConvertor {
public static void main(String[] args) {
String str = "This is a test for *中网!@#$。,?";
try {
File f = new File("D:/test.txt");
FileOutputStream fio = new FileOutputStream(f);
String s = gbToUtf8(str);
fio.write(s.getBytes("UTF-8"));
fio.close();
}
catch (Exception e) {
e.printStackTrace();
}
}
public static String gbToUtf8(String str) throws UnsupportedEncodingException {
StringBuffer sb = new StringBuffer();
for (int i = 0; i < str.length(); i++) {
String s = str.substring(i, i + 1);
if (s.charAt(0) > 0x80) {
byte[] bytes = s.getBytes("Unicode");
String binaryStr = "";
for (int j = 2; j < bytes.length; j += 2) {
// the first byte
String hexStr = getHexString(bytes[j + 1]);
String binStr = getBinaryString(Integer.valueOf(hexStr, 16));
binaryStr += binStr;
// the second byte
hexStr = getHexString(bytes[j]);
binStr = getBinaryString(Integer.valueOf(hexStr, 16));
binaryStr += binStr;
}
// convert unicode to utf-8
String s1 = "1110" + binaryStr.substring(0, 4);
String s2 = "10" + binaryStr.substring(4, 10);
String s3 = "10" + binaryStr.substring(10, 16);
byte[] bs = new byte[3];
bs[0] = Integer.valueOf(s1, 2).byteValue();
bs[1] = Integer.valueOf(s2, 2).byteValue();
bs[2] = Integer.valueOf(s3, 2).byteValue();
String ss = new String(bs, "UTF-8");
sb.append(ss);
} else {
sb.append(s);
}
}
return sb.toString();
}
private static String getHexString(byte b) {
String hexStr = Integer.toHexString(b);
int m = hexStr.length();
if (m < 2) {
hexStr = "0" + hexStr;
} else {
hexStr = hexStr.substring(m - 2);
}
return hexStr;
}
private static String getBinaryString(int i) {
String binaryStr = Integer.toBinaryString(i);
int length = binaryStr.length();
for (int l = 0; l < 8 - length; l++) {
binaryStr = "0" + binaryStr;
}
return binaryStr;
}
}
分享到:
相关推荐
标题中的"UTF-8与GB2312之间的互换类.rar_ UTF-8toGB2312_UTF-8 GB2312_gb2312_mmi_ch"指的是一个能够帮助开发者在UTF-8和GB2312两种编码格式之间进行转换的程序类库。这个压缩包可能包含了源代码文件,使得用户可以...
在这个"基于ASP的gb2312和utf-8文件编码互换源码 v1.05.zip"压缩包中,提供的源码显然专注于解决一个常见的问题:在ASP环境中,如何在GB2312和UTF-8两种不同的字符编码之间进行转换。 GB2312是中国大陆广泛使用的...
同样,如果要将UTF-8文件转换为GBK,只需将上述代码中的`'gbk'`和`'utf-8'`位置互换即可。 在实际操作中,需要注意的是,编码转换可能会丢失信息。如果原始文件中含有目标编码不支持的字符,转换后这些字符可能无法...
2 支持ANSI,Unicode,UTF-8等编码互换 3 可以设置无限个书签(9种图标可换)轻松定位 4 空格,制表符彩色显示,并可互相转换 5 可以对任意的文本块进行操作,ALT键+鼠标 6 对括号{}〔〕()可以高亮配对...
UTF-8的优点在于对ASCII字符集的兼容性,使得英文字符只占用一个字节,而大部分中文字符则占用3个字节。 “中文 Big5/GBK/Unicode/UTF8 内码转换器”就是这样一个工具,它能够帮助用户在这些编码之间进行转换。比如...
了解了这些基本的转换方法后,我们还可以探讨更复杂的场景,例如处理多字节字符(如UTF-8编码的非ASCII字符)和Unicode的代理对(对于超出基本多语言平面的字符)。在处理这些情况时,需要额外的步骤和库支持,以...
这两个字符集不能通过像Unicode在UTF-8和UTF-16之间所做的操作来直接互换。 它们基于具有不同汉字顺序的不同编码(ASCII / EBCDIC)。 ICU( )支持两种字符集,但占用空间很大。 这是一种占地面积小,快速的解决...
2 支持ANSI,Unicode,UTF-8等编码互换 3 可以设置无限个书签(9种图标可换)轻松定位 4 空格,制表符彩色显示,并可互相转换 5 可以对任意的文本块进行操作,ALT键+鼠标 6 对括号{}〔〕()可以高亮配对显示...
sds.setCharset(Charset.forName("UTF-8")); String typeName = sds.getTypeNames()[0]; // 输出gis.osm_buildings_a_free_1 // 更改表名以避免特殊字符 typeName = typeName.replace(".", "_e"); // 创建...
2. 文件互换:跨平台的文件共享,例如Windows系统中的GBK文件传到Linux或Mac系统,可能需要转换成统一的UTF-8编码。 3. 网页开发:网页的源代码可能使用某种特定编码,而浏览器默认的编码可能不同,不匹配会导致乱码...
不同编码间的转换是字符串转换的重要部分,例如将GBK编码的字符串转换为UTF-8编码,以支持更多语言字符。 3. **格式化转换**:字符串可以被格式化以适应特定的输出需求,如printf样式(C/C++)、`str.format()`...
DESKeySpec desKeySpec = new DESKeySpec(key.getBytes("UTF-8")); SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES"); SecretKey secretKey = keyFactory.generateSecret(desKeySpec); ``` ####...
开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,...
开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,...
Unicode的标准实现通常包括UTF-8、UTF-16等编码方式。 #### 四、Big5与Unicode的转换原理 由于Big5和Unicode编码方式的不同,两者之间的转换涉及到编码解码的过程。从Big5转换到Unicode,首先需要将Big5编码的字符...
Unicode标准中最常见的编码形式之一是UTF-8,它使用可变长度字节序列来表示字符,这使得它在互联网上的传输非常高效。 #### 三、中文与Unicode的转换 ##### 1. 将Unicode转为中文 在Java中,可以编写一个方法将...
2 支持ANSI,Unicode,UTF-8等编码互换 3 可以设置无限个书签(9种图标可换)轻松定位 4 空格,制表符彩色显示,并可互相转换 5 可以对任意的文本块进行操作,ALT键+鼠标 6 对括号{}〔〕()可以高亮配对显示...
##### 3.3.4 UTF-8与其他格式的互换 - 由于UTF-8兼容ASCII,并且可以轻松地与其他Unicode编码格式(如UTF-16)进行转换,因此它是XML文档最常用的编码方式。 ##### 3.3.5 UTF-16编码特点 - UTF-16对于大多数...
开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,...