gpt4 book ai didi

http - 解析 HTTP - Bytes.length != String.length

转载 作者:可可西里 更新时间:2023-11-01 16:39:42 27 4
gpt4 key购买 nike

我通过 nio.SocketChannel 使用 HTTP,所以我得到的数据 block 是 Array[Byte]。我想将这些 block 放入解析器中,并在每个 block 放入后继续解析。

HTTP 本身似乎使用 ISO8859-Charset,但 Payload/Body 本身可能是任意编码的:如果 HTTP Content-Length 指定 X 字节,则 UTF8 解码的 Body 可能具有更少的字符(1 个字符在 UTF8 中可能由 2 个字节等表示)。

那么什么是一个好的解析策略来遵守明确指定的内容长度和/或传输编码:分块,它指定要遵守的 block 长度。

  • 将每个数据 block 附加到 mutable.ArrayBuffer[Byte],在字节中搜索 CRLF,解码​​从 0 到 CRLF 到字符串的所有内容,并与 StatusRegex、HeaderRegex 等正则表达式匹配,等等?
  • 使用适当的字符集(例如 iso8859、utf8 等)解码每个数据 block 并添加到 StringBuilder。使用此解决方案,我无法遵守任何 Content-Length 或 Chunk-Size,但是..我必须关心它吗?
  • 任何其他解决方案...?

最佳答案

您可以使用 UTF-16,它无论如何都是 Java 的内部字符串表示形式。每个字符占 2 个字节,除非有代理项。因此,您可以扫描字符串中的代理字符,直到达到允许的长度,适本地考虑它们,然后只复制子字符串。

关于http - 解析 HTTP - Bytes.length != String.length,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3013123/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com