gpt4 book ai didi

scala - Play Framework Ning WS API 编码问题与 HTML 页面

转载 作者:塔克拉玛干 更新时间:2023-11-01 19:08:32 25 4
gpt4 key购买 nike

我正在使用 Play Framework 2.3 和 WS API 下载和解析 HTML 页面。对于非英语页面(例如俄语、希伯来语),我经常会弄错编码。

这是一个例子:

def test = Action.async { request =>

WS.url("http://news.walla.co.il/item/2793388").get.map { response =>
Ok(response.body)
}
}

这将返回网页的 HTML。英文字符接收正常。希伯来字母显示为乱码。 (不仅仅是在渲染时,在内部字符串级别)。像这样:

<title>29 ×ר×××× ××פ××ת ×ש×××× ×× ×¤××, ××× ×©×××©× ×שר×××× - ×××××! ××ש×ת</title>

来自同一网站的其他文章可能显示​​正常。

对同一网页使用 cURL 返回非常好,这让我相信问题出在 WS API 中。

有什么想法吗?

编辑:

我找到了解决方案 in this SO question .

将响应解析为 ISO-8859-1,然后像这样将其转换为 UTF-8:

Ok(new String(response.body.getBytes("ISO-8859-1") , response.header(CONTENT_ENCODING).getOrElse("UTF-8")))

正确显示。所以我有一个可行的解决方案,但为什么不在内部完成?

最佳答案

好的,这是我最终在生产中使用的解决方案:

def responseBody = response.header(CONTENT_TYPE).filter(_.toLowerCase.contains("charset")).fold(new String(response.body.getBytes("ISO-8859-1") , "UTF-8"))(_ => response.body)

解释:

如果请求返回还指定字符集的“Content-Type” header ,只需返回响应正文,因为 WS API 将使用它来正确解码,否则,假设响应是 ISO-8859-1 编码并转换它转换为 UTF-8

关于scala - Play Framework Ning WS API 编码问题与 HTML 页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26409801/

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