0 0

java 把gbk字符串转为UTF8 的解决方案20

网上找了很多都不行啊 大家能不能帮下忙 全部分都给了
2013年4月20日 11:56

8个答案 按时间排序 按投票排序

0 0

看看这个 https://github.com/downgoon/gbk2utf8  直接提供了工具,下载先来,一条命令全搞定。java -jar gbk2utf8-0.0.1-SNAPSHOT-all.jar $src-gbk-path $dst-utf8-path

而且关键是,如果源目录中既有GBK,又有UTF-8,很多工具最终笼统的对每个文件都 GBK -> UTF-8,会导致原本就是UTF-8,被误做GBK转码,最后出来的反而是乱码的,这个工具首先识别了源文件是否是GBK,只有是GBK的才转,不是GBK的直接跳过。

2016年12月04日 11:22
0 0

看个例子:
String s1 = "hello中国人";
String iso = new String(s1.getBytes("utf-8"), "iso-8859-1");
System.out.println(iso);//hello中国人
String utf8 = new String(iso.getBytes("iso-8859-1"), "utf-8");
System.out.println(utf8);//hello中国人

String s1 = "hello中国人";
String gbk = new String(s1.getBytes("utf-8"), "gbk");
System.out.println(gbk);//hello涓浗浜�
String utf8 = new String(gbk.getBytes("gbk"), "utf-8");
System.out.println(utf8);//hello中国�?

并不是什么中文奇数偶数的问题,刚好偶数个中文可以成功,可以说是巧合也可是说不是巧合。
总之,用什么编码就用什么解码,如果已经是乱码了,可能可以恢复,也可能恢复不了。能恢复的前提是,产生乱码时用的是单字节编码。

2015年9月15日 21:56
0 0

这篇文章应该能帮到你,编码问题汇总-http://www.blogjava.net/zhangchao/archive/2011/05/26/351051.html

2013年4月21日 12:14
0 0

呵呵,没想到我的答案被评价为没有价值的,sigh。
好吧,看来不仔细说明不行。 程序员的读代码能力是很重要滴。

首先,java在内存中是使用的双字节字符unicode的编码方式。
每个char对应的是32位的整型。
内存中对字符串操作其实不用考虑字符集。

只有在读取到内存中,和输出时,需要考虑字符集转换。

如果源代码中包含中文字符串,java编译器会按照编译时指定的字符集转换到unicode。
(不指定时,按当前操作系统的配置来)

当一个java程序从外部获取字符串时,使用Reader系列类,
会按照默认或者指定的字符集读取,然后转换到unicode。
也就是为啥我在读文件时 指定了 Charset.forName("GBK")
单纯的InputStream类不能处理字符集。

需要utf-8一般是为了输出。有两种方式,一种,使用Writer,内置了字符集转换能力。
选择合适的,然后在构造函数中指定即可。(有Writer是往OutputStream输出的,一下想不起名字了)

还有一种就是,自己用String的getBytes(charset)方法,得到转换过后的编码的二进制数组,然后对这个数组处理。比如我的代码中的FileOutputStream

2013年4月21日 11:08
0 0

奇数个汉字直接gbk转utf-8乱码,可以使用以下:

String gbk = "我来了"; 
String iso = new String(gbk.getBytes("UTF-8"),"ISO-8859-1"); 
String utf8=new String(iso.getBytes("ISO-8859-1"),"UTF-8");
,具体原理请参考:http://blog.csdn.net/xfblue2dreamfy/article/details/6935594

2013年4月20日 13:41
0 0

下面还有一种方式getUTF8StringFromGBKString(从其它博客转过来的),可供你参考:

package test;

import java.io.UnsupportedEncodingException;

public class TestEncoder {

	/**
	 * @param args
	 */
	public static void main(String[] args) throws Exception {
		String gbk = "iteye问答频道编码转换问题";
		
		String iso = new String(gbk.getBytes("UTF-8"),"ISO-8859-1"); 

		System.out.println(iso);
		
		String utf8 = new String(iso.getBytes("ISO-8859-1"),"UTF-8");
		System.out.println(utf8);
		
		System.out.println(getUTF8StringFromGBKString(gbk));
	}

	public static String getUTF8StringFromGBKString(String gbkStr) {
		try {
			return new String(getUTF8BytesFromGBKString(gbkStr), "UTF-8");
		} catch (UnsupportedEncodingException e) {
			throw new InternalError();
		}
	}
	
	public static byte[] getUTF8BytesFromGBKString(String gbkStr) {
		int n = gbkStr.length();
		byte[] utfBytes = new byte[3 * n];
		int k = 0;
		for (int i = 0; i < n; i++) {
			int m = gbkStr.charAt(i);
			if (m < 128 && m >= 0) {
				utfBytes[k++] = (byte) m;
				continue;
			}
			utfBytes[k++] = (byte) (0xe0 | (m >> 12));
			utfBytes[k++] = (byte) (0x80 | ((m >> 6) & 0x3f));
			utfBytes[k++] = (byte) (0x80 | (m & 0x3f));
		}
		if (k < utfBytes.length) {
			byte[] tmp = new byte[k];
			System.arraycopy(utfBytes, 0, tmp, 0, k);
			return tmp;
		}
		return utfBytes;
	}
}

2013年4月20日 12:46
0 0

public class TestEncoder {

	/**
	 * @param args
	 */
	public static void main(String[] args) throws Exception {
		String gbk = "iteye问答频道编码转换问题";
		
		String iso = new String(gbk.getBytes("UTF-8"),"ISO-8859-1"); 

		System.out.println(iso);
		
		String utf8 = new String(iso.getBytes("ISO-8859-1"),"UTF-8");
		System.out.println(utf8);
	}
}

2013年4月20日 12:43
0 1

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.nio.charset.Charset;


public class StringConverter {
	private static void convertFile(File src, String outputFile) throws IOException {
		char[] buf = new char[1024];
		StringBuilder strb = new StringBuilder();
		
		InputStreamReader isr = null;
		
		try {
			isr = new InputStreamReader(new FileInputStream(src), Charset.forName("GBK"));
			int readCount = 0;
			while ( -1 != (readCount =isr.read(buf))) {
				strb.append(buf, 0, readCount-1);
			}
			
		} finally {
			if (isr!=null) {
				try {
					isr.close();
				} catch (IOException e) {
				}
			}
		}
		// first method to output
		PrintWriter pw = null;
		try {
			pw = new PrintWriter(outputFile+"1.txt", "utf-8");
			pw.write(strb.toString());
			pw.flush();
		} finally {
			if (null != pw) {
				pw.close();
			}
		}
		// second method to output
		FileOutputStream fos = null;
		try {
			fos = new FileOutputStream(outputFile+"2.txt");
			fos.write(strb.toString().getBytes("utf-8"));
			fos.flush();
		} finally {
			if (fos!=null) {
				try {
					fos.close();
				} catch (IOException e) {
				}
			}
		}
	}
	
	public static void main(String[] args) throws IOException {
		convertFile(new File("content.txt"), "converted");
	}

}

2013年4月20日 20:19

相关推荐

    java文件编码GBK转utf8完美解决方案

    idea、Eclipse等项目导入.java文件中文乱码完美解决方案:文件夹下所有GBK编码的.java一键转为utf-8,操作方式:将GBK2UTF8.jar文件考到需要转码项目目录,在当前位置运行控制台,输入命令java -jar GBK2UTF8.jar,...

    关于JAVA字符编码:Unicode,ISO-8859-1,GBK,UTF-8编码及相互转换

    例如,将一个UTF-8编码的字符串转换为Unicode编码的字符串: ```java String utf8Str = "中文"; String unicodeStr = new String(utf8Str.getBytes("UTF-8"), "UTF-8"); ``` #### 6. 示例分析 - **从GBK到ISO-...

    DB2 GBK 字符集解决方案.zip

    DB2数据库系统是IBM开发的...通过上述步骤和注意事项,我们可以成功地在DB2环境中实施GBK字符集解决方案,确保中文数据的正确存储和处理。实践过程中,应仔细检查每个环节,避免因字符集问题导致的数据丢失或显示错误。

    关于java按字节截取带有汉字的字符串的解法

    在上述代码中,我们首先将字符串转换为UTF-8编码的字节数组,然后截取所需的字节数量,最后再将截取的字节数组转换回字符串。这种方法可以确保即使在处理汉字时也能正确截取字符串。 需要注意的是,不同编码方式...

    Java精确截取字符串.pdf

    这段代码首先计算字符串转换为GBK编码后的字节数组`b`,然后遍历字节数组,判断每个字节是否小于0来识别双字节字符(中文字符)。最后,根据双字节字符的数量是否为偶数来决定截取的字节数,以保证截取后字符串的...

    统计字符串中英文标点数量并截取.zip

    这个压缩包内包含的可能是Java代码示例(如csdn-demo),用于批量处理字符串,统计其中的中英文标点符号的数量,并根据指定的字符编码(GBK或UTF)来计算字符串的总长度。如果字符串的总长度超过预设的最大长度,...

    解析文件中的中文字符串

    如果文件编码是UTF-8或其他包含中文字符的编码,字符串中的中文字符可以直接识别。然而,需要注意的是,如果文件编码是ASCII或其他不支持中文的编码,那么中文字符可能会显示为乱码。 对于Designer文件,由于其内部...

    JNI传递中文字符串资料

    对于中文字符串,使用`getBytes("UTF-8")`或`getBytes("GBK")`(根据实际编码方式)转换为字节数组,然后通过JNI的`NewDirectByteBuffer`或`GetPrimitiveArrayCritical`方法传递给C/C++。 2. **在C/C++中接收和处理...

    java utf8 to gb2312

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

    深入UTF8字符编码

    使用`new String(byte[], "UTF-8")`或`String.getBytes("UTF-8")`可以进行UTF-8与Java字符串之间的转换。 4. UTF-8编码的优缺点: 优点:UTF-8在互联网上广泛支持,兼容性好;英文字符只占1字节,节省空间;处理...

    Java解决WE8DEC字符集乱码问题

    字符集定义了一组可用的字符,如ASCII、ISO-8859-1或WE8DEC,而编码是将字符集中的字符转换为二进制表示的方式,例如UTF-8或GBK。Java中,`Charset`类用于处理字符集和编码转换。 2. **Java中的字符编码** Java...

    编程相关 原创字符串转换小工具

    2. **字符串格式化**:将数据转换为特定格式的字符串,便于读取、存储或传输。例如,JSON格式适合数据交换,XML适用于结构化数据,而HTML则用于网页内容。 3. **大小写转换**:在编程中,大小写转换常用于规范化...

    java字符编码问题

    // 将字符串转换为UTF-8编码的byte数组 byte[] utf_8 = name.getBytes("UTF-8"); printByte(utf_8); // 输出UTF-8编码后的结果 // 将字符串转换为UTF-16编码的byte数组 byte[] utf_16 = name.getBytes("UTF-...

    cxf2.7.18编码GBK的不可映射字符问题

    这里将HTTP传输的默认字符集设置为UTF-8,覆盖了可能的GBK设置。 - 检查并修改输入输出流的编码设置:确保所有输入输出流使用统一的编码,避免在转换过程中产生编码冲突。 2. **客户端解决方案**: - 配置CXF...

    Android手机端转换Ansi字符串,手机怎么转换为ansi编码,Delphi源码.rar

    - 使用`String.getBytes()`,指定源字符串的Unicode编码(通常是UTF-8),转换为字节数组。 - 使用第三方库(如ICU4J)或者自定义函数,将字节数组转换为目标Ansi编码。由于Android API本身不支持所有Ansi编码,这...

    java Socket与C#通信中中文乱码问题的解决方案

    在Java客户端,我们使用`getBytes("UTF-8")`将字符串编码为UTF-8字节数组,并通过`DataOutputStream`的`write()`方法写入网络流。这样做是为了确保服务器端能够正确解码。 接下来,是C#服务器端的处理。为了确保...

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

    例如,将UTF-8编码的字符串转换为GBK编码:`new String(str.getBytes("UTF-8"), "GBK")`。 五、Swing和AWT界面组件 在GUI界面中,组件的字体设置和文本渲染可能涉及编码问题。需确保字体支持中文,且在设置文本时...

    java乱码解决方案

    例如,将ISO-8859-1编码的字符串转换为GB2312编码: ```java public static String ISOtoGB(String iso) { try { if (iso.equals("") || iso == null) { return ""; } else { iso = iso.trim(); String gb = ...

    Java处理 Jni中的汉字问题

    在Java中,字符串默认是Unicode编码的,而`GetStringUTFChars`将字符串转换为UTF-8是为了在C/C++代码中处理。然而,当C代码试图以ASCII或非UTF-8编码方式打印这些UTF-8编码的汉字时,就会出现乱码。 在原始的示例中...

    Java乱码解决方案

    以下是一些关于Java乱码解决方案的关键知识点: 1. **字符编码基础**:首先要理解的是字符编码,如ASCII、GBK、UTF-8等。ASCII只支持英文字符,GBK是中国常用的扩展GBK编码,而UTF-8是通用的多字节编码,能支持全...

Global site tag (gtag.js) - Google Analytics