作者darkk6 (Mr. Pan)
看板java
标题Re: [问题] big5转utf8
时间Wed Mar 26 13:33:58 2014
※ 引述《del680202 (HANA)》之铭言:
: 有试着爬过文,但是没找到解法
: 最近要做资料传递
: 但是问题是server端是utf-8的编码环境
: 而client是big5的编码环境
: 现在策略是client端统一把资料转utf-8文字传过去
: 我试着估狗,但是找到的答案都是用getBytes方式去转
: 可是我实际测试了尽管用getBytes去拿到utf-8文字
: 他也只是假性当作utf-8,骨子里还是big5文字
错~ 骨子里是一连串的 bytes 资料
传送资料的时候都是用 byte , 所以无论如何请将资料以 byte 来看待
我们知道文字的编码是一种规范(参考高中资讯课程第二章)
变成版标了 \OwO/ , 重新翻了一下课本应该是第一章啦 XD
大家耳熟能详的就是 Big-5 UTF-8 Unicode GB...
资料要传出去的时候是以 byte 进行传送, 也就是根据文字的编码决定
"转成哪些 bytes" , 参考
http://ideone.com/PelQG4
范例中可以看到 "哈" 这个字的 Big-5 编码是
AB A2 , UTF-8 为
E5 93 88
系统预设和 UTF-8 相同就表示这个系统的预设编码是 UTF-8
PS : 系统指的是 OS , 作业系统,并非 Java
假设一个文字档只有一个字 "哈" , 并且是以 Big-5 编码储存,就表示
其 Binary 内容是
AB A2 , 那麽,在不只定 Reader (或 InputStream)
读取文字编码的状况下,使用系统预设(这边假设是 UTF-8) , 会得到甚麽结果呢 ?
就会像这样:
http://ideone.com/wweTqe ,
目前还不用去管在程式
里面他用甚麽方式取储存。
记住,资料传输都用 Bytes , 因此在读取资料的时候,要根据你取得什麽样子的
Bytes 去调整用甚麽方式来解释他、 "看待" 他
至於送出的时候(我记得原PO是在做 socket ?),也要指定输出的格式
一个字串 "哈" 储存在程式里面,现在要送出去的时候一样需要转换成 bytes
但这边就遇到了编码问题,要转换成那些 bytes 送出?
是
AB A2 还是
E5 93 88 ? 这就是在决定 getBytes("这里") 要采用何种编码。
如果我 Server 将文字以 Big-5 编码送出,那麽就会送出
AB A2 两个 bytes
Client 把收到的资料指定用 Big-5 来 "看待" 的话,就可以正常地取出 "哈"
这个字了。
至於何谓 Java 里面使用 Unicode ? 这就是上面我说
目前不用去管的部分。
先看范例 :
http://ideone.com/RjzhvU
从此例子中可以看到 "哈" 在 Unicode 里面是 54 C8
※ FE FF 称为 BOM , 和文字本身无关,参考 http://ppt.cc/7KiZ
接着我们各自使用正确的编码建立 Big5 和 UTF8 的文字,利用
codePointAt 取得文字的编码(16 进位),可以发现无论是从 Big5 或者 UTF-8
编码而来的文字,到 java 里面都是 Unicode 的方式储存
http://ideone.com/RwF0c8
"哈" = 0x54C8
Client 储存
=> 转换後准备送出
-- Socket 传送 -->
收到准备转换 =>
Server 储存
(指定 Big5)
54C8 => ABA2 ---- Socket 传送 ----> ABA2 => 54C8
(指定 UTF-8)
54C8 => E59288 ---- Socket 传送 ----> E59288 => 54C8
结论:
简单来说请记得资料再传送和读写,都以 Bytes 去想
话说有人提到 javac -encoding 的样子 ?
这个 encoding 是指你的 Souce Code ( .java )是什麽编码的文字档
和执行时的编码完全无关
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 210.60.161.229
※ 文章网址: http://webptt.com/cn.aspx?n=bbs/java/M.1395812048.A.BFB.html
※ 编辑: darkk6 来自: 210.60.161.229 (03/26 16:28)
※ 编辑: darkk6 来自: 210.60.161.229 (03/26 16:31)
1F:推 danny8376:推详解www 03/26 17:42
2F:→ swpoker:我高中没教阿 03/27 09:03
3F:推 summerleaves:高中没教 +1 可能是年纪大了一点 03/28 10:57
4F:推 PsMonkey:高中的时候,倚天中文还是先进产品 (艹 03/28 11:18
5F:→ Lordaeron:我认为, 是你们读的学校不同的关系. 03/28 11:30
6F:→ Lordaeron:高中就学完search and sort,会写简单的GAME的很多. 03/28 11:32
7F:→ darkk6:这篇主题是不是变了啊 XDD 03/28 18:25
8F:推 kiwatami:请问darkk6大大是用哪种IDE开发啊? 要改什麽设定才可以在 03/29 22:04
9F:→ kiwatami:console同时显示big5跟utf-8的文字? 03/29 22:06
10F:→ darkk6:并没有同时显示 UTF8 和 Big5 阿 @@ 我哪里有说XDDDD 03/30 08:52
11F:推 kiwatami:我没有质疑你的意思啦XD 只是最近我也在搞编码 03/30 10:14
12F:推 kiwatami:非utf-8都会显示成乱码 很难debug 03/30 10:18
13F:→ darkk6:我知道啦XD 是想说我没提到我在IDE有用两种编码 XD 03/30 15:35