我通過nio.SocketChannel
使用HTTP,所以我得到的數據塊大小爲Array[Byte]
。我想把這些塊放到一個解析器中,並在每個塊放好之後繼續解析。解析HTTP - Bytes.length!= String.length
HTTP本身似乎使用ISO8859字符集,但Payload/Body本身可以任意編碼: 如果HTTP Content-Length指定X字節,則UTF8解碼的Body可能具有更少的字符(1個字符可能是以2個字節以UTF8表示,等等)。
那麼什麼是一個很好的解析策略,以表彰一個明確指定的Content-Length和/或Transfer-Encoding:Chunked,它指定了要被尊重的塊長度。
- 追加每個數據塊到
mutable.ArrayBuffer[Byte]
,搜索CRLF中的字節,直到CRLF解碼了從0到字符串,匹配常規表達式就像StatusRegex,HeaderRegex等? - 使用適當的字符集(例如iso8859,utf8等)解碼每個數據塊並添加到
StringBuilder
。有了這個解決方案,我無法兌現任何內容長度或塊大小,但是..我必須關心它嗎? - 任何其他解決方案...?
感謝您的提示,將需要尋找這些替代品... 目前我有嚴重的問題正確使用CharsetDecoder,它不時拋出MALFORMED [1]。我的嘗試在那裏:http://github.com/hotzen/Thesis/blob/master/src/dataflow/io/http/Parser.scala#L416 欣賞任何評論。 – hotzen 2010-06-11 10:03:41