首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Spring :如何将WebClient响应体转换为特定编码的字符串

Spring :如何将WebClient响应体转换为特定编码的字符串
EN

Stack Overflow用户
提问于 2022-03-05 16:13:00
回答 1查看 1.4K关注 0票数 0

我是第一次使用WebClient的Spring网络流量模块。

其想法是查询某个URL,这给了我一个shift-jis编码的CSV。

代码语言:javascript
运行
复制
String content = webClient
    .method(HttpMethod.GET)
    .acceptCharset(Charset.forName("shift-jis")) 
    .uri(uri)
    .accept(MediaType.TEXT_PLAIN, new MediaType("text", "csv"))
    .retrieve()
    .toEntity(String.class)
    .mapNotNull(HttpEntity::getBody)
    .block();

这有点工作,但content字符串看起来像是编码错误--可能是UTF-8。

或者,Apache HttpClient版本似乎有效:

代码语言:javascript
运行
复制
HttpClient client = HttpClientBuilder.create().build();
HttpGet get = new HttpGet(uri);
String content = IOUtils.toString(
    client.execute(get).getEntity().getContent(), 
    Charset.forName("shift-jis"));

所以我想知道如何才能干扰在toEntity中发生的转换。我尝试将它添加到webClient调用中:

代码语言:javascript
运行
复制
.codecs(configurer -> {
   StringDecoder decoder = StringDecoder.textPlainOnly();
   decoder.setDefaultCharset(Charset.forName("shift-jis"));
   configurer.customCodecs().registerWithDefaultConfig(decoder);
})

唉,这似乎还没有被人接受。但是,在StringDecoder#decode中设置断点并在调试期间手动覆盖defaultCharset字段确实有帮助。

EN

回答 1

Stack Overflow用户

发布于 2022-03-05 16:15:19

啊..。刚发完帖子,我就意识到:也许我的自定义text/csv mime类型并不真正被解释为textPlainOnly

而且,实际上:

代码语言:javascript
运行
复制
StringDecoder decoder = StringDecoder.allMimeTypes();

很明显这招很管用。

如果我的方法非常麻烦,并且有更好/正确的方法来解决这个问题,那么这个问题就没什么可提的了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71363816

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档