RandomAccessFile 的默认编码为ISO-8859-1

本文介绍了一种通过读取文件前三个字节来判断文件编码的方法,包括UTF-8、Unicode、UTF-16BE、UTF-16LE及GBK等常见编码格式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

private String getEncodeType(RandomAccessFile randomFile) {
		String encodeType = "utf-8";
		
		if(randomFile == null) {
			return encodeType;
		}
		
		try {
			randomFile.seek(1l);
			
			byte[] first3bytes = new byte[3];
			randomFile.read(first3bytes);
			
			if(first3bytes[0] == (byte) 0xEF && first3bytes[1] == (byte) 0xBB
                    && first3bytes[2] == (byte) 0xBF) {
				encodeType = "utf-8";
			}
			else if(first3bytes[0] == (byte) 0xFF
                    && first3bytes[1] == (byte) 0xFE) {
				encodeType = "unicode";
			}
			 else if (first3bytes[0] == (byte) 0xFE
                     && first3bytes[1] == (byte) 0xFF) {
				 encodeType = "utf-16be";
			 }
			 else if (first3bytes[0] == (byte) 0xFF
                     && first3bytes[1] == (byte) 0xFF) {
				 encodeType = "utf-16le";
			 }
			 else {
                 encodeType = "gbk";
			 }
			
			randomFile.seek(0);
		} catch (IOException e) {
			e.printStackTrace();
		}
		
		return encodeType;
	}

RandomAccessFile 的默认编码为ISO-8859-1,出现中文乱码需要如此

readStr.getBytes("ISO-8859-1"), encode);

encode为你所读文件的编码格式,获取方法

有错请指正



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值