※ 引述《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 储存
=> 转换后准备送出