作者tkcn (say)
看板java
标题Re: [问题] 编码问题
时间Thu Feb 7 01:11:00 2013
这个状况是两个问题造成的。
必要知识:
http://en.wikipedia.org/wiki/Byte_order_mark
※ 引述《airizumo ( 欧巴马)》之铭言:
: 想请问各位先进
: 我有一个档案(utf-8)用ultra打开看到的是
: FF FE 54 00 4F 00 4F 00 4C 00 .... => TOOL...
wiki 上说 FF FE 开头的是 UTF-16 (LE),接着的 TOOL 也再次证实。
我不熟 UltraEdit,但这看起来似乎是它帮你做了 UTF-8 转 UTF-16 (LE) 的动作。
所以你看到的 hex 并不是真正的原始资料。
: 但用byte[]读取档案字串时
: byte[] content
: for(int i=0;i<content.length;i++){
: s2 = s2 + String.valueOf(Integer.toHexString(b[i]))+ " ";
: }
: 最後的读出来的却是
: ffffffef ffffffbb ffffffbf 54 4f 4f 4c ....
再次参看 wiki,得知 UTF-8 的 BOM 应为: EF BB BF
与你的结果对照,只差在这些 byte 前面都多了 ffffff。
java 的 byte 型态是 signed byte,范围在 -128 ~ 127 之间,
当你的值落在 0x80 ~ 0xFF 之间时,会被视为负数,
所以会显示这样的结果并不意外。
: 想请问一样是show出每一个byte结果却会有一段落差??
: 另外想请问若我用byte[] 读取ANSI档案後有办法将里面的byte转成相对应的utf-8编码吗?
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.114.78.231
※ 编辑: tkcn 来自: 140.114.78.231 (02/07 01:14)
1F:推 sbrhsieh:UltraEdit 开启utf8编码的文件是使用unicode编辑 02/07 23:55