`
manyinjin
  • 浏览: 92256 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java中GB2312 To Utf-8字符转换

阅读更多

    朋友让我帮他写个gb2312->utf-8的字符转换程序,找了半天没有在网上找到合适的,于是自己动手写了一个,呵呵。把它贴在这里,免得以后忘记了 ^_^

    实现思路大致如下:

  •  取得一个汉字的Unicode码
  • 把Unicode码分解为两个16进制数据字符串(丢弃前两个字节)
  • 把这两个16进制数据字符串转换成二进制数据字符串
  • 把二进制数据字符串分解为三个串,第一个串为4(0~4)个位,在高位加上标记位“1110”,第二(4~10)、三个(10~16)串均为6个位,分别在高位加上“10”标记位
  • 把这三个二进制串分别转换为10进制数据并赋值给字节型数组
  • 根据这个字节型数组构造UTF-8字符
java 代码
 
  1. import java.io.File;   
  2. import java.io.FileOutputStream;   
  3. import java.io.UnsupportedEncodingException;   
  4.   
  5. /**  
  6.  * 2007-8-10 jyin at gomez dot com  
  7.  */  
  8. public class CharsetConvertor {   
  9.     public static void main(String[] args) {   
  10.         String str = "This is a test for *中网!@#$。,?";   
  11.         try {   
  12.             File f = new File("D:/test.txt");   
  13.             FileOutputStream fio = new FileOutputStream(f);   
  14.             String s = gbToUtf8(str);   
  15.             fio.write(s.getBytes("UTF-8"));   
  16.             fio.close();   
  17.         }   
  18.         catch (Exception e) {   
  19.             e.printStackTrace();   
  20.         }   
  21.     }   
  22.   
  23.     public static String gbToUtf8(String str) throws UnsupportedEncodingException {   
  24.         StringBuffer sb = new StringBuffer();   
  25.         for (int i = 0; i < str.length(); i++) {   
  26.             String s = str.substring(i, i + 1);   
  27.             if (s.charAt(0) > 0x80) {   
  28.                 byte[] bytes = s.getBytes("Unicode");   
  29.                 String binaryStr = "";   
  30.                 for (int j = 2; j < bytes.length; j += 2) {   
  31.                     // the first byte   
  32.                     String hexStr = getHexString(bytes[j + 1]);   
  33.                     String binStr = getBinaryString(Integer.valueOf(hexStr, 16));   
  34.                     binaryStr += binStr;   
  35.                     // the second byte   
  36.                     hexStr = getHexString(bytes[j]);   
  37.                     binStr = getBinaryString(Integer.valueOf(hexStr, 16));   
  38.                     binaryStr += binStr;   
  39.                 }   
  40.                 // convert unicode to utf-8   
  41.                 String s1 = "1110" + binaryStr.substring(04);   
  42.                 String s2 = "10" + binaryStr.substring(410);   
  43.                 String s3 = "10" + binaryStr.substring(1016);   
  44.                 byte[] bs = new byte[3];   
  45.                 bs[0] = Integer.valueOf(s1, 2).byteValue();   
  46.                 bs[1] = Integer.valueOf(s2, 2).byteValue();   
  47.                 bs[2] = Integer.valueOf(s3, 2).byteValue();   
  48.                 String ss = new String(bs, "UTF-8");   
  49.                 sb.append(ss);   
  50.             } else {   
  51.                 sb.append(s);   
  52.             }   
  53.         }   
  54.         return sb.toString();   
  55.     }   
  56.   
  57.     private static String getHexString(byte b) {   
  58.         String hexStr = Integer.toHexString(b);   
  59.         int m = hexStr.length();   
  60.         if (m < 2) {   
  61.             hexStr = "0" + hexStr;   
  62.         } else {   
  63.             hexStr = hexStr.substring(m - 2);   
  64.         }   
  65.         return hexStr;   
  66.     }   
  67.   
  68.     private static String getBinaryString(int i) {   
  69.         String binaryStr = Integer.toBinaryString(i);   
  70.         int length = binaryStr.length();   
  71.         for (int l = 0; l < 8 - length; l++) {   
  72.             binaryStr = "0" + binaryStr;   
  73.         }   
  74.         return binaryStr;   
  75.     }   
  76. }  
分享到:
评论
2 楼 manyinjin 2007-08-08  
引用
参见java.util.Properties。

呵呵,刚才看来一下Properties的源码,早看了就少费点劲了^_^
1 楼 Godlikeme 2007-08-08  
参见java.util.Properties。

相关推荐

    完美转换UTF-8 到 GB2312(源代码和详细说明)

    不幸的是,广收欢迎的代码查看工具Source insight 虽然支持汉字,但是它不支持UTF-8。笔者感到疑惑的是,当初开发source insight的这帮人现在哪里去了?为何不继续开发?这么好的工具,却不再更新了,实在让人可惜。...

    Java 程序转码(UTF-8)

    常见的字符编码有ASCII、GB2312、GBK、UTF-8等。其中,UTF-8是一种变长字符编码,用于Unicode编码标准,兼容ASCII,并且能够高效地存储大多数非英文字符。 ##### 2. UTF-8编码特点 - **兼容性**:UTF-8编码与ASCII...

    URL编码,Gb2312页面提交到Utf-8页面

    本文将深入探讨如何实现从Gb2312编码的网页向Utf-8编码网页的数据提交过程中的URL编码转换。Gb2312是一种广泛应用于中国大陆地区的字符编码标准,而UTF-8则因其能够支持全球绝大多数语言的特性,在互联网领域得到...

    Delphi中UTF-8,Unicode格式转换

    delphi7调用delphi2009生成的dll文件会出现乱码问题。是unicode的原因 终于找到了UTF-8、Unicode格式转换函数

    GBK文件夹转化UTF-8 支持文件名

    本文将深入探讨如何使用Java工具将GBK编码的文件夹批量转换为UTF-8编码,同时支持文件名的转换。 首先,GBK是中国大陆广泛使用的汉字编码标准,它兼容GB2312,能够表示大部分中文字符。然而,GBK不支持Unicode,这...

    java utf8 to gb2312

    在实际应用中,有时我们需要将 UTF-8 编码的字符串转换为 GB2312 编码。 #### 二、基础知识 1. **UTF-8**:一种支持多种语言的 Unicode 编码方式,能够表示世界上几乎所有的字符。它采用变长编码,最多用四个字节...

    eclispe GBK转UTF-8乱码解决

    UTF-8则是一种变长的Unicode编码方式,可以表示世界上几乎所有的字符集,包括GBK中的所有字符。在Eclipse中,如果你的源代码或资源文件是GBK编码,而Eclipse的工作空间设置为UTF-8,就可能出现乱码。 解决Eclipse中...

    UTF-8 UNICODE GBK 相互转换C源码

    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-convert2utf将目录下的全部源文件转成UTF8编码"指的是使用Python编写的一个脚本或工具,该工具能够遍历指定目录,检测并转换其中的GB、GBK以及其他非UTF-8编码的文本文件和源代码文件,统一转换为UTF-8...

    gbk汉字转utf8编码的转换函数,亲测有用

    在实际编程中,我们有时需要将GBK编码的字符串转换为UTF-8编码,以便在支持UTF-8的环境中正确显示和处理汉字。这就需要用到转换函数。在Python中,我们可以使用`codecs`库中的`decode`和`encode`方法来实现这个转换...

    Convert_To_UTF8.rar_ConvertToUTF8_ConvertToUTF8.zip_convert utf8

    本主题聚焦于如何将GBK编码的文本转换为UTF-8编码,特别关注Java编程语言中的实现方法。 GBK编码是GB2312编码的扩展,包含了更多的汉字和符号,但在全球化背景下,UTF-8编码因其兼容性和效率优势而受到青睐。UTF-8...

    乱码 编码方式解决 gbk ISO8859-1 utf8 编码

    UTF-8的最大特点是兼容ASCII,且对于英文字符只需要一个字节,因此在网络传输中非常高效。 #### 二、乱码问题的原因及解决方案 **乱码产生的原因**: 1. **编码不匹配**:当读取或显示文件时使用的编码与文件实际...

    java字符串的各种编码转换

    - **定义**:UTF-8是一种可变长度的字符编码格式,支持世界上几乎所有已知的语言。 - **特点**: - 向后兼容ASCII字符集。 - 对于ASCII字符,每个字符仅使用一个字节。 - 对于非ASCII字符,使用1到4个字节来编码...

    UNICODE_2.00_编码转换.rar

    本文将深入探讨“UNICODE_2.00_编码转换.rar”文件所涉及的编码概念,包括Text、ANSI、Unicode、UCS-2、UTF-8以及UTF-7,并解释如何进行汉字转UCS-2格式的转换。 1. **Text编码**:在计算机早期,"Text"通常指基于...

    Java语言的中文处理问题完整解决方案

    但在实际应用中,不同的系统、文件或网络传输可能使用不同的字符编码,如GBK、GB2312、UTF-8等,这就可能导致中文乱码问题。 二、输入输出流的编码设置 1. 文件读写:Java的`FileReader`和`FileWriter`默认使用...

    解决dbf Failed to parse Number: For input string: "-.---"

    DBF文件中的文本字段可以使用不同的字符集,如ASCII、GB2312、UTF-8等。如果程序在读取DBF文件时未正确识别字符集,就可能出现乱码。为了解决这个问题,需要确保程序在打开文件时明确指定正确的编码方式。 在提供的...

    Java读取中文文件出现乱码解决过程.mht

    在不同的操作系统上,这个默认编码可能是不同的,例如Windows系统通常是GBK或GB2312,而Linux或Mac系统则更倾向于UTF-8。如果文件的编码与程序所使用的编码不一致,就会出现乱码。 解决Java读取中文文件出现乱码...

    linux转化windows文件编码格式脚本

    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;`:如果...

    idea中引入了gb2312编码的文件的解决方法

    然而,这些文件可能存在非UTF-8的编码格式,例如GB2312,这可能导致在IDEA中显示乱码,甚至在编译时引发错误。本文将详细阐述如何在IDEA中解决这类问题。 首先,当IDEA遇到GB2312编码的文件时,可能会出现字符无法...

    Mysql插入中文乱码问题解决

    - 在使用 Java 等语言连接 MySQL 数据库时,可以在 JDBC 连接字符串中添加 `useUnicode=true&characterEncoding=utf-8` 参数来指定使用 UTF-8 编码。示例: ```plaintext jdbc:mysql://localhost:3306/login?...

Global site tag (gtag.js) - Google Analytics