`
csbison
  • 浏览: 154783 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

java中关于字符、文件乱码的笔记

阅读更多

 


 

老生常谈的问题了,记录一下以便他人翻阅。

 

结论:

1.       字符串与byte数组的转换 默认编码是采用系统的编码(例如Windows下是GB18030

2.       java类文件中本身包含的字符串,采用什么编码是 根据javac编译时的环境变量决定的。

 

穿插一下:

重复一下http中的中文乱码问题,例如使用prototype.js发送包含中文的ajax报文时,Servlet接收端可能会遇到乱码问题。该情况可以用以下api解决:

ServletRequest.setCharacterEncoding

ServletResponse.setCharacterEncoding

 

程序代码:

 

/**
 * 
 * @author csbison
 */
public class BTest {

	private final static char[] hexDigits = { '0', '1', '2', '3', '4', '5',
			'6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// 测试证明, 字符串与byte数组的转换,默认就是用系统平台的
		try {
			String src = "诺基亚";
			String value = null;
			value = bytesToHexString(src.getBytes());
			System.out.println("Default=" + value);

			value = bytesToHexString(src.getBytes("ISO-8859-1"));
			System.out.println("ISO-8859-1=" + value);

			value = bytesToHexString(src.getBytes("GBK"));
			System.out.println("GBK=" + value);

			value = bytesToHexString(src.getBytes("UTF-8"));
			System.out.println("UTF-8=" + value);

			System.out.println("/////////////////////////");

			byte[] aa = "诺基亚".getBytes();
			System.out.println(new String(aa));
			System.out.println(new String(aa, "GBK"));
			System.out.println(new String(aa, "ISO-8859-1"));
			System.out.println(new String(aa, "UTF-8"));
		} catch (Exception e) {
			e.printStackTrace();
		}

	}

	public static final String bytesToHexString(byte[] buf) {
		StringBuffer sb = new StringBuffer();
		for (int i = 0; i < buf.length; i++) {
			int n = buf[i];
			if (n < 0) {
				n = 256 + n;
			}
			int d1 = n / 16;
			int d2 = n % 16;

			sb.append(hexDigits[d1]);
			sb.append(hexDigits[d2]);
		}
		return sb.toString();
	}

}
 

 

Windows上的测试结果:

Default=c5b5bbf9d1c7

ISO-8859-1=3f3f3f

GBK=c5b5bbf9d1c7

UTF-8=e8afbae59fbae4ba9a

/////////////////////////

诺基亚

诺基亚

?¦Ì?¨´??

ŵ��

 

Linux上的测试结果:

1.       Locale=zh的情况下,javac,然后再java执行。结果如下:

-bash-3.00$ java BTest

Default=c5b5bbf9d1c7

ISO-8859-1=3f3f3f

GBK=c5b5bbf9d1c7

UTF-8=e8afbae59fbae4ba9a

/////////////////////////

诺基亚

诺基亚

???ù??

???

2.       Locale=C的情况下,直接java执行(也就是java文件还是在Locale=zh的环境下编译的)。结果如下:

-bash-3.00$ java BTest  

Default=3f3f3f

ISO-8859-1=3f3f3f

GBK=c5b5bbf9d1c7

UTF-8=e8afbae59fbae4ba9a

/////////////////////////

???

???

???

???

 

3.       Locale=C的情况下,javac,然后再java执行。结果如下:

-bash-3.00$ java BTest      

Default=c5b5bbf9d1c7

ISO-8859-1=c5b5bbf9d1c7

GBK=3f3f3fa8b43f3f

UTF-8=c385c2b5c2bbc3b9c391c387

/////////////////////////

诺基亚

???

诺基亚

???

 

 

关于对字符编码的问题,可以参考:

http://www.utf.com.cn/article/s320                    UTF-8 字符集基础(1

http://www.phpweblog.net/XBOX/archive/2008/09/06/5726.html

http://javajiao.iteye.com/blog/151995  

 

 

[待继续整理和增加]

 

0
0
分享到:
评论

相关推荐

    JavaFX+Jfoenix 学习笔记(十)--系统托盘及解决中文乱码问题源码

    在本篇JavaFX+Jfoenix学习笔记中,我们将探讨如何在JavaFX应用程序中实现系统托盘功能,以及如何解决可能出现的中文乱码问题。系统托盘是现代桌面应用中常见的一种特性,允许用户在关闭主窗口后,仍然可以通过托盘...

    java学习笔记

    本资源是 Java 开发者的学习笔记,涵盖了项目管理、权限管理、自动编号、Ajax 访问 servlet、数据库查询、字符串处理、数据加密、jQuery 弹框插件、乱码解决方案、版本控制、流程中加载 Java 事件、页面警告弹框、...

    Freemarker 学习笔记一 【乱码解决】

    此外,如果乱码问题出现在文件读写过程中,检查文件的编码设置。例如,如果你在读取CSV文件时遇到乱码,可以使用`BufferedReader`配合`CharsetDecoder`来指定编码: ```java InputStreamReader reader = new ...

    Java学习笔记

    Java学习笔记 1、连接数据库步骤 2、不同数据库的驱动程序和连接字符串 3、连接数据库常见问题 4、B/S结构和C/S结构的区别 5、如何处理中文乱码问题 6、使用JavaMail发送注册验证邮件 7、不安全的用户名密码验证 8、...

    JavaWeb开发中文乱码问题解决方案

    - 请求乱码:客户端(浏览器)与服务器交互时,POST或GET参数中的中文字符如果没有正确处理,可能会导致乱码。 - 响应乱码:服务器返回的页面内容,如果编码不一致,也可能产生乱码。 - 文件上传/下载:文件名或...

    java反射笔记

    关于标签"反射基础",在Java反射基础中,还包括了泛型信息的获取、接口实现类的判断、注解的处理等内容: 1. 泛型信息:虽然Java泛型在编译后会被擦除,但通过反射仍可以获取到泛型的实际类型。 2. 接口实现:`Class...

    java web 学习笔记,超详细好用.docx

    Java Web 学习笔记主要涉及了文件上传这一关键知识点,这是在开发Web应用程序时常见的功能,比如用户上传头像、图片或附件等。文件上传在HTML表单中通过特定的方式实现,包括以下几点: 1. **表单提交方式**:为了...

    韩顺平循序渐进学java从入门到精通课件-笔记坦克大战全过程

    - 文件中包含了一些无法识别的字符(例如“娘家”,可能是编码问题导致的乱码),这部分内容在解析时会跳过或被忽略。 总结而言,文档中涉及的知识点涉及到了Java编程的基本语法、面向对象的概念、图形用户界面的...

    JAVA-JSP学习笔记.doc

    【JAVA-JSP学习笔记】 1. **JSP中去除字符串空格**:在JSP中,我们可以使用`String.trim()`方法来去除字符串两端的空格,如果需要去除所有空格,可以使用`String.replaceAll("\\s", "")`。 2. **JSP页面间参数传递...

    JAVA-WEB学习笔记.pdf

    以上是对 JAVA-WEB 学习笔记中的知识点进行的详细总结与解释。这些内容涵盖了从环境搭建到基本语法的学习,对于初学者来说是非常宝贵的学习资料。通过深入理解这些概念,可以帮助开发者更好地掌握 Java Web 开发的...

    0基础java笔记(自记)

    ### 0基础Java笔记知识点详解 #### 一、软件初始设置 在开始学习Java之前,首先需要对开发环境进行一些基本的配置,确保能够高效地编写代码。 **1. Java字体设置** - **路径**: 首选项 &gt; font 的 basic &gt; font ...

    java编程笔记(语法类)

    ### Java编程笔记(语法类) #### 一、Java基础概念 **JDK**: Java Development Kit,即Java开发工具包,包含了编译、调试等工具,是进行Java开发的基础。 **JRE**: Java Runtime Environment,Java运行环境,...

    java web 开发 经典笔记

    例如,`getParameter()`方法用于获取请求参数,处理乱码问题通常涉及到对请求参数进行编码转换,如使用`request.setCharacterEncoding("UTF-8")`来设置字符编码,防止下载文件时出现乱码。 2. **page对象**:这个...

    txt转java之转换器

    3. **文本转换**:转换txt到Java的过程可能涉及到将txt文件的内容解析成Java数据结构,例如字符串数组、字符数组或者自定义的对象模型,以便于在Java程序中进行进一步处理。这可能包括分词、词性标注、语义分析等...

    自考Java语言程序设计(一)串讲笔记

    描述中提到的“珍藏版,很全面”,暗示这份笔记不仅包含了Java语言的基础知识,还可能涵盖了大量实用技巧、高级特性和常见问题解决方案,适合深度学习和长期参考。全面性意味着它覆盖了从入门到精通的各个阶段,无论...

    appfuse学习笔记(三)解决乱码和菜单设置

    在本篇“appfuse学习笔记(三)解决乱码和菜单设置”中,我们将深入探讨在使用AppFuse框架时遇到的编码问题以及如何定制应用程序的菜单。AppFuse是一款开源项目,它提供了一个快速开发Web应用的基础,特别是对于Java...

Global site tag (gtag.js) - Google Analytics