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  

 

 

[待继续整理和增加]

 

MacOS蓝牙连接疑难杂症:从基础排查到高级修复全攻略 本文提供了一份全面的MacOS蓝牙故障排查与修复指南。从基础的菜单栏检查、终端命令诊断,到软/硬重启蓝牙服务、删除配置文件,再到使用blueutil工具、重置NVRAM等高级方法,系统性地解决了蓝牙无法连接、连接不稳定等常见问题。最后还分享了环境干扰排查、预防措施及硬件故障自检方法,帮助用户彻底解决Mac蓝牙连接难题。 阅读详情

相关推荐

STM32硬件SPI调试ADS1256的3个致命坑,CubeMX配置避坑指南

本文深入解析STM32硬件SPI调试ADS1256高精度ADC芯片时常见的3大配置陷阱,包括SPI时钟频率、时钟极性与相位、数据字节序等关键问题。通过CubeMX实战配置指南和实测数据对比,提供稳定可靠的解决方案,帮助开发者避免常见错误,提升采样精度和系统稳定性。

weixin_42550597的博客 346

项目文件转特定编码格式(UTF-8、GBK等)

编程语言,总会遇到乱码问题。可以使用工具将自己的项目文件批量转成特定的编码格式。以Java项目举例,大家在使用Eclipse的过程中肯定也会遇到编码的问题。乱码出现的原因是编码和解码格式的不一致造成的。

wchycsdn的博客 1441

方差分析ANOVA、T检验、卡方检验的区别

T检验和ANOVA都是用来看样本之间均值是否相等,但是两者又有什么区别呢? 卡方检验是用来看分类变量之间有没有相关性。 自变量X类型 自变量X组数 因变量Y类型 分析方法 离散(类别) 仅仅2组 连续(均值) t检验 离散(类别) 2组及以上 连续(均值) ANOVA 离散(类别) 2组及以上 离散(类别) 卡方检验 进一步细分 方差分析 从理论上讲,方差分析有两个前提条件,一是因变量Y需要满足正态性要求,二是满足方差齐检验。 方差不齐时可使用‘非参数检验’,同时还可使用wel

itslifeng的博客 4万+

Java基础学习之用System.out.println()输出中文字符串乱码问题

问题描述: 在学习“java基本数据类型”相关知识点过程中,使用不同文本编辑器编写java源代码文件在cmd控制台中编译和运行过程中多次出现乱码情况。  电脑操作系统:win10 企业版 文本编辑器:Notepad(Windows自带记事本)、EditPlus、Notepad++、Sublime Text3 执行环境:Windows控制台(cmd) 1、字符编码 关于字符编码的产生...

卿小锐的个人博客 8万+

torchsparse安装

torchsparse安装以及安装失败原因分析和解决

AI_BING_的博客 1万+

Linux中断子系统(二)—— 通用框架处理

1、数据结构分析 (1)中断描述符结构structirq_desc: 1)打开CONFIG_SPARSE_IRQ宏(中断编号不连续),中断描述符以radix- tree来组织,用户在初始化时进行动态分配,然后再插入radix-tree中; 2)关闭CONFIG_SPARSE_IRQ宏(中断编号连续),中断描述符以数组的 形式组织,并且已经分配好; 3)不管哪种形式,最终都可以通过linuxirq号来找到对应的中断描述符; (2)stru...

weixin_38428439的博客 4871

GBK/GB2312编码问题分析以及java获取汉字国标码

编码问题分析 个人经验:   这几天在公司,发报文调试接口的时候由于使用UTF8跟GBK两种编码很头疼。页面显示为utf8码,但是解析报文使用的却是GBK,这样就会出现两种情况,要么你调试页面是正常的,报文是乱的,要么调试页面使用乱码格式,报文显示正常!。。。。 总结后:发现一个项目中必须要统一使用一种编码格式!然后就是不同编码必定会有差异,GBK编码跟utf8编码是不可能存在转换关系的,用

First_sight的专栏 3657

COMSOL实现裂缝性储层油水两相流模拟的关键技术

多孔介质中的流体流动模拟是油气藏开发的核心技术,其基本原理基于达西定律和质量守恒方程。在裂缝性储层中,离散裂缝网络与基质系统的耦合流动带来了特殊的数值挑战。通过COMSOL Multiphysics平台实现的多物理场耦合技术,可以精确模拟油水两相在复杂裂缝系统中的渗流行为。该技术采用Level Set方法表征裂缝几何形态,结合自适应网格生成技术解决狭窄裂缝的网格剖分难题,并创新性地引入Bang-Larsen毛管压力滞后模型,显著提高了采收率预测精度。这些方法在致密油藏开发、水驱优化等工程实践中具有重要应用价

weixin_34005090的博客 229

【Java学习|黑马笔记|Day20】File(构造方法、成员方法)、IO流(字节输入出流、字符输入出流、文件拷贝)及其相关练习

本文总结了Java中File类和IO流的学习笔记,重点介绍了File对象的基本用法。主要内容包括:File类的构造方法(通过字符串路径、父子路径组合创建对象)、常用成员方法(判断文件属性、获取信息、创建删除文件/文件夹、遍历目录等)。文中还提供了多个实用示例代码,如创建多级目录、查找特定类型文件等。File类可用于表示文件或文件夹路径,无论路径是否存在,是Java处理文件操作的基础类。笔记适合Java初学者参考,帮助掌握基本的文件操作技能。

2401_87144364的博客 734

TYPE-C接口电路设计篇(一)

常见USB接口类型 随着USB Type-C接口的推行,USB Type-C是一种通用串行总线(USB)的硬件接口形式,USB Type-C接口在消费类产品普及程度越来越高,常见的适配器、笔电、手机等产品都兼容USB Type-C设计,接口多元化逐渐趋向归一,从而可以看出USB Type-C的重要性。 在了解USB Type-C接口之前,我们先来回顾下USB Type-A和USB Type-B接口,USB3.0 Type-A和Type-B接口定义分别如下。 USB 3.0...

JWu的博客 3万+

商品评论中的实体情感分析

在之前的文章中我已经将商品评论中的评价实体,也就是特征(feature)给挖掘出来了,我看了一下,挖掘的效果还是不错的。原文链接:http://blog.youkuaiyun.com/chixujohnny/article/details/52794685 下面一步要做的是施加情感因子,也就是说,要将人们评论时候所连带的感情程度施加一下。这项任务的归类应该是情感分析技术。 目前该类问题的情感分析技

chixujohnny 7971

java字符串乱码_java字符乱码

在java中处理字符时,经常会发生乱码,而主要出现的地方在读取文本文件时发生,或者是写入到文件中,在其他地方打开乱码。如下例子:1 BufferedReader br = null;2 try{3 br = new BufferedReader(new InputStreamReader(newFileInputStream(4 ...

weixin_32108979的博客 1232

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

JAVA 文件读取乱码

JAVA:文件读取中文乱码问题 java读取文件的类以后很多,这里就不一一列举了,这里主要纠结读取文件的中文乱码问题 1.普通文件中文乱码 普通的文件是指我们平时用记事本可以看到内容的文件,例如.txt结尾的文件,这里为了测试,我准备了了两个编码的文件,test.txt和test2.txt,test.txt是通过window创建的文件编码是 GBK,test2.txt是在编辑器里创建的,编辑器的编码是 UTF-8; 文件内容如下: test.txt test2.txt 方式一 :字节流读取字节转化为字符串

yan_zhi_chao的博客 2031

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

【Java文件操作(五)】从txt文件中读取字符串、乱码原因

我的博客——Java文件操作系列 【Java文件操作(一)】递归打印文件目录 【Java文件操作(二)】删除文件夹,但保留其内部文件 【Java文件操作(三)】递归复制文件夹内所有文件 【Java 文件操作(四)】递归套递归,计算每个文件夹大小 【Java 编码转换】将汉字转化为gb2312编码 注意&坑 由于编码方式,第14行的数组大小必须为编码长度的整数倍,否则,解码时会出现乱码 通...

寒泉 2万+

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

java读取txt文件乱码问题

java读取txt文本中如含有中文,可能会出现乱码,解决方案是: 1.要统一编码,java工程的编码,txt文本编码,java工程中的java文本编码都统一为utf-8; 利用 InputStreamReader(new FileInputStream(fileUrl), “utf-8”)将文本再次设置为utf-8 //1从源文件中逐行读,然后逐行写入目标文件 public static void fileCopyByLine1(String sourceFileName,String destFileN

m0_46620273的博客 4015

java 文件流 乱码_Java IO流之中文乱码

相信有过学过JavaEE的人们都有遇到过中文乱码问题吧,最简单的就是表单数据提交时中文出现乱码,乱码难解决吗?其实不难,只要掌握好编码的设置,乱码神马的一边去。今天主要就讲讲一些常用的可以设置编码的函数的用法。讲一下常见的编码,例如ISO-8859-1,gbk,utf-8等,这三个就是最常见的了。首先,为了防止乱码,我们得先统一编码,然后出现乱码再通过一些函数来解决。下面讲讲常见的中文乱码解决方法...

weixin_33270404的博客 2955

java文件乱码_Java文件读取乱码问题解决

使用java读取磁盘文件内容容易出现乱码, 问题是由于java使用的编码和被读取文件的编码不一致导致的。假设有一个test.txt的文本文件,文件内容为:“测试java读取中文字符串乱码问题”, 其中包含中文,文件的编码格式为GBK。 假如我们使用的java平台默认编码为UTF-8可使用System.out.println(Charset.defaultCharset());打印查看那么当我们使用...

weixin_29117805的博客 6936

java 读写乱码_java读写文件出现乱码的解决方法

java读写文件出现乱码的解决方法发布时间:2020-06-18 11:16:42来源:亿速云阅读:101作者:Leah这篇文章给大家分享的是java读写文件出现乱码的解决方法,如果你刚好也有这个困惑,不妨参照这篇文章。阅读完整文相信大家能解决这个问题。1、读文件:/*** 读取文件内容** @param filePathAndName* String 如 c:\\1.txt 绝对路径* @ret...

weixin_36119965的博客 3877

java判断字符是否为中文乱码的方法

   中文乱码在项目中是经常会遇到的情况。当我们通过设置request和response字符集,但是还是出现中文乱码的时候,今天给介绍一种通过java方法实现判断string是否为乱码的方法。 /** * 判断字符串是否是乱码 * * @param strName 字符串 * @return 是否是乱码 */ public ...

Log-PS 6825

java中字符串乱码问题解决方案

在java程序开发中经常会遇到字符串乱码,下面提供的三种方法,基本能解决常见的乱码问题。 1.乱码原因 乱码问题的产生,最根本的原因就是使用错误的字符集解码字节流或者将给定的字符串用错误的字符集编码成错误字节流造成的。例如”中文”两个汉字,如果用 ISO8859-1字符集将其编码为字节流,因为这个字符集不支持中文,所以就会出错,输出结果为3f3f,其意义就是??。再例如”中文”二字的G...

hello_cynthia的博客 2424

java excel 中文乱码_java中读取excel文件中字符串乱码问题解决方法

以前的时候发现直接java读取一个excel文件输出里面的字符串会乱码,中文字符不会乱码,但是遇到英文的时候输出会乱码。这个问题太奇怪了。我的表格名字为Shirley.xls。我曾经直接读取excel表格中那个有英文字符串的单元格Workbook book = Workbook.getWorkbook(new File("D:\\excel\\Shirley.xls"));// 获得第一个工作表对...

weixin_36003005的博客 4597

java 文件读取中文乱码_java文件读取时发生中文乱码怎么解决

java文件读取时发生中文乱码怎么解决发布时间:2020-06-23 09:33:47来源:亿速云阅读:59作者:Leahjava文件读取时发生中文乱码怎么解决?这篇文章运用了实例代码展示,代码非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。最近遇到一个问题,Java读取文本文件(例如csv文件、txt文件等),遇到中文就变成乱码。读取代码如下:List lines=new Arra...

weixin_35726635的博客 3545

java读取dat文件乱码_Java中读取txt文件中中文字符时,出现乱码的解决办法

这是我写的一个Java课程作业时,遇到的问题。问题描述:我要实现的就是将txt文件中的内容按一定格式读取出来后,存放在相应的数组。我刚开始运行时发现,英文可以实现,但是中文字符就是各种乱码。最后各种检查排错得到原因如下:(1)最好先检查你的Eclipse中的Window->Preference->General->WorkSpace中的字符编码格式是什么,最后选成UTF-8格式的...

weixin_35822534的博客 1944
上一篇: Web Service HTTP1.0 and HTTP1.1性能测试报告
下一篇: Weblogic的update和stop/start的区别
csbison
博客等级 码龄23年 1粉丝 5原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值