为什么用iso-8859-1来转换字符集

为什么用iso-8859-1来转换字符集

在学习的时候,记得总是使用iso-8859-1来转换字符集。当时也没注意,今天又碰到中文乱码,查了下iso-8859-1,大概明白了一些。

  • 在java本身读取不到系统字符集的时候,默认使用的iso-8859-1
  • iso-8859-1是单字节表示,所以无法表示255之上的字节,比如中文作为String输出的时候就会乱码,但是我们可以通过new String(iso_bytes, charset)的方法来得到正确的中文
  • 转换的时候getBytes和new String(byte[], charset)应该是相同的,才可以正确还原String内容。但是如果是iso-8859-1不能针对一个字符进行解码,那么就不可能再还原出来。
  • 但是有一种情况来说,就可以实现字符集的转换,这就是先把文件内容转换成String到java内存中,然后就可以以任何字符集进行读出来。道理很简单,因为java本身String没有编码,内部使用的是utf-16存储,所以不论什么字符集到java的String里,都会变成utf-16存储,但是java负责从utf-16到其他字符集的对应关系,所以都出来的不乱码。

所以来说,我们需要保证写和读的字符集是相同的,并且存储的字符集可以正确编码这些内容(ISO-8859-1就不能编码中文),才可以保证中文的不乱码.
但是在java中,String是使用unicode表示,没有字符集的区别。所以我们可以从任何支持与unicode转换的字符集来互相转换,包括iso-8859-1.就像是Java提供了一个中间的标准编码字典,同时提供与各个字符集的转换对照表一样。所以我们在转换的时候,只需要getBytes时候选同样的字符集,就能解析出来同样的byte数组,然后交给unicode去自己对照设置的字符集,组成unicode.

PS:

  • 在XFTP上传时候选择utf8,但是只是针对名称进行了utf8转化,内容还是gbk的。
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值