java utf16-BE_utf8 utf16 utf16le utf16be

1. 如果这个UTF-16文件里带有BOM的话, charset就用"UTF-16", java会自动根据BOM判断LE还是BE, 如果你在这里指定了"UTF-16LE"或"UTF-16BE"的话, 猜错了会生成乱七八糟的文件, 哪怕猜对了, java也会把头2个字节当成文本输出给你而不会略过去, 因为[FF FE]或[FE FF]这2个代码没有内容, 所以, windows会用"?"代替给你

2. 如果这个UTF-16文件里不带BOM的话, 则charset就要用"UTF-16LE"或"UTF-16BE"来指定LE还是BE的编码方式

另外, UTF-8也有BOM的, [0xEF, 0xBB, 0xBF], 但可有可无, 但用windows的notepad另存为时会自动帮你加上这个, 而很多非windows平台的UTF8文件又没有这个BOM, 真是难为我们这些程序员啊

错误的例子

1. 文件A, UTF16格式, 带BOM LE,

InputStreamReader reader=new InputStreamReader(fin, "utf-16le")

会多输出一个"?"在第一个字节, 原因: java没有把头2位当成BOM

2. 文件A, UTF16格式, 带BOM LE,

InputStreamReader reader=new InputStreamReader(fin, "utf-16be")

会出乱码, 原因: 字节的高低位弄反了, 'a' 在文件里 [0x61, 0x00], 但java以为'a'应该是[0x00 0x61]

3. 文件A, UTF16格式, 带BOM BE,

InputStreamReader reader=new InputStreamReader(fin, "utf-16le")

会出乱码, 原因: 字节的高低位弄反了, 'a' 在文件里 [0x00, 0x61], 但java以为'a'应该是[0x61 0x00]

4. 文件A, UTF16格式, 带BOM BE,

InputStreamReader reader=new InputStreamReader(fin, "utf-16be")

会多输出一个"?"在第一个字节, 原因: java没有把头2位当成BOM

5. 文件A, UTF16格式, LE 不带BOM,

InputStreamReader reader=new InputStreamReader(fin, "utf-16")

会出乱码, 因为utf-16对于java来说, 默认为be(1.6JDK, 以后的说不准)

但windows的notepad打开正常, 因为notepad默认为le, - -#

6. 文件A, UTF16格式, BE 不带BOM,

InputStreamReader reader=new InputStreamReader(fin, "utf-16")

恭喜你, 蒙对了

但winodws的notepad打开时, 每个字符中间都多了一个" ", 因为notepad把它当成ASNI了

在windows下输出unicode文件

通过java出来unicode文件, 也容易混淆

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值