朋友让我帮他写个gb2312->utf-8的字符转换程序,找了半天没有在网上找到合适的,于是自己动手写了一个,呵呵。把它贴在这里,免得以后忘记了 ^_^
实现思路大致如下:
- 取得一个汉字的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;
-
-
-
-
- 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) {
-
- String hexStr = getHexString(bytes[j + 1]);
- String binStr = getBinaryString(Integer.valueOf(hexStr, 16));
- binaryStr += binStr;
-
- hexStr = getHexString(bytes[j]);
- binStr = getBinaryString(Integer.valueOf(hexStr, 16));
- binaryStr += binStr;
- }
-
- 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;
- }
- }
分享到:
- 2007-08-08 18:56
- 浏览 20768
- 评论(2)
- 论坛回复 / 浏览 (2 / 19193)
- 查看更多
相关推荐
不幸的是,广收欢迎的代码查看工具Source insight 虽然支持汉字,但是它不支持UTF-8。笔者感到疑惑的是,当初开发source insight的这帮人现在哪里去了?为何不继续开发?这么好的工具,却不再更新了,实在让人可惜。...
常见的字符编码有ASCII、GB2312、GBK、UTF-8等。其中,UTF-8是一种变长字符编码,用于Unicode编码标准,兼容ASCII,并且能够高效地存储大多数非英文字符。 ##### 2. UTF-8编码特点 - **兼容性**:UTF-8编码与ASCII...
本文将深入探讨如何实现从Gb2312编码的网页向Utf-8编码网页的数据提交过程中的URL编码转换。Gb2312是一种广泛应用于中国大陆地区的字符编码标准,而UTF-8则因其能够支持全球绝大多数语言的特性,在互联网领域得到...
delphi7调用delphi2009生成的dll文件会出现乱码问题。是unicode的原因 终于找到了UTF-8、Unicode格式转换函数
本文将深入探讨如何使用Java工具将GBK编码的文件夹批量转换为UTF-8编码,同时支持文件名的转换。 首先,GBK是中国大陆广泛使用的汉字编码标准,它兼容GB2312,能够表示大部分中文字符。然而,GBK不支持Unicode,这...
在实际应用中,有时我们需要将 UTF-8 编码的字符串转换为 GB2312 编码。 #### 二、基础知识 1. **UTF-8**:一种支持多种语言的 Unicode 编码方式,能够表示世界上几乎所有的字符。它采用变长编码,最多用四个字节...
UTF-8则是一种变长的Unicode编码方式,可以表示世界上几乎所有的字符集,包括GBK中的所有字符。在Eclipse中,如果你的源代码或资源文件是GBK编码,而Eclipse的工作空间设置为UTF-8,就可能出现乱码。 解决Eclipse中...
2. UNICODE to UTF-8:相反,我们需要将每个UNICODE字符转换为相应的UTF-8字节序列。对于小于U+0080的字符,只需1个字节;U+0080到U+07FF的字符,需要2个字节;U+0800到U+FFFF的字符,需要3个字节;大于U+FFFF的字符...
标题"Python-convert2utf将目录下的全部源文件转成UTF8编码"指的是使用Python编写的一个脚本或工具,该工具能够遍历指定目录,检测并转换其中的GB、GBK以及其他非UTF-8编码的文本文件和源代码文件,统一转换为UTF-8...
在实际编程中,我们有时需要将GBK编码的字符串转换为UTF-8编码,以便在支持UTF-8的环境中正确显示和处理汉字。这就需要用到转换函数。在Python中,我们可以使用`codecs`库中的`decode`和`encode`方法来实现这个转换...
本主题聚焦于如何将GBK编码的文本转换为UTF-8编码,特别关注Java编程语言中的实现方法。 GBK编码是GB2312编码的扩展,包含了更多的汉字和符号,但在全球化背景下,UTF-8编码因其兼容性和效率优势而受到青睐。UTF-8...
UTF-8的最大特点是兼容ASCII,且对于英文字符只需要一个字节,因此在网络传输中非常高效。 #### 二、乱码问题的原因及解决方案 **乱码产生的原因**: 1. **编码不匹配**:当读取或显示文件时使用的编码与文件实际...
- **定义**:UTF-8是一种可变长度的字符编码格式,支持世界上几乎所有已知的语言。 - **特点**: - 向后兼容ASCII字符集。 - 对于ASCII字符,每个字符仅使用一个字节。 - 对于非ASCII字符,使用1到4个字节来编码...
本文将深入探讨“UNICODE_2.00_编码转换.rar”文件所涉及的编码概念,包括Text、ANSI、Unicode、UCS-2、UTF-8以及UTF-7,并解释如何进行汉字转UCS-2格式的转换。 1. **Text编码**:在计算机早期,"Text"通常指基于...
但在实际应用中,不同的系统、文件或网络传输可能使用不同的字符编码,如GBK、GB2312、UTF-8等,这就可能导致中文乱码问题。 二、输入输出流的编码设置 1. 文件读写:Java的`FileReader`和`FileWriter`默认使用...
DBF文件中的文本字段可以使用不同的字符集,如ASCII、GB2312、UTF-8等。如果程序在读取DBF文件时未正确识别字符集,就可能出现乱码。为了解决这个问题,需要确保程序在打开文件时明确指定正确的编码方式。 在提供的...
在不同的操作系统上,这个默认编码可能是不同的,例如Windows系统通常是GBK或GB2312,而Linux或Mac系统则更倾向于UTF-8。如果文件的编码与程序所使用的编码不一致,就会出现乱码。 解决Java读取中文文件出现乱码...
7. `iconv -f gb2312 -t utf-8 $file -o $file.new`:使用 iconv 工具将文件编码格式从 GB2312 转换为 UTF-8 编码,输出文件名为 `$file.new`。 8. `if [ $? = 0 ] ;then rm -rf $file;mv $file.new $file;`:如果...
然而,这些文件可能存在非UTF-8的编码格式,例如GB2312,这可能导致在IDEA中显示乱码,甚至在编译时引发错误。本文将详细阐述如何在IDEA中解决这类问题。 首先,当IDEA遇到GB2312编码的文件时,可能会出现字符无法...
- 在使用 Java 等语言连接 MySQL 数据库时,可以在 JDBC 连接字符串中添加 `useUnicode=true&characterEncoding=utf-8` 参数来指定使用 UTF-8 编码。示例: ```plaintext jdbc:mysql://localhost:3306/login?...