gpt4 book ai didi

java - 编码问题 - 我认为 UTF-8 被视为 ISO-8859-1

转载 作者:太空宇宙 更新时间:2023-11-04 06:56:20 24 4
gpt4 key购买 nike

我有一个使用 javax ws 注释来定义服务端点的 Web 服务,如下所示:

@GET
@Path("eventBir")
@Produces(MediaType.APPLICATION_XML)
public String getEventsBir(
@QueryParam("applicationId") String applicationId);

响应可能包含外来字符,这些字符在某种程度上被编码为不正确。

离开上述服务时的部分响应示例:

<Market name="Apuestas con hándicap en vivo">

但是当它到达外部应用程序时,它会以某种方式进行编码以给出:

<Market name="Apuestas con hándicap en vivo">

我找到了this website这似乎已经定义了我的确切问题。所以看起来我得到了一个 UTF-8 编码的字符串,并将其传递给一些将其编码为 ISO-8859-1 的代码。但是,我正在努力解决如何修复它。

在我的服务返回字符串后,该字符串将通过我认为是 Spring 创建的代码传递来包装 Web 服务。我不确定它也可能被网络服务器破坏。

在返回字符串之前我可以对它进行一些编码吗?或者我可以设置一些 Spring 配置来将响应设置为 UTF-8 编码吗?

编辑:找到有问题的 Spring 类

看起来 Web 服务的 Spring 包装器中的违规类是 StringHttpMessageConverter

Here's the class在 Grep 代码中

“ISO-8859-1”类中定义了一个默认字符集,这就是解析响应(UTF-8 格式)的内容,因此我最终遇到了上述问题。

所以现在我正在寻找一种好方法来解决这个问题。

最佳答案

由于返回的 XML 字符串没有定义编码,Spring 使用默认的 StringHttpMessageConverter ,它将所有内容编码为 ISO-8859-1,因为这是未指定其他内容时 HTTP 响应的默认值。

看起来StringHttpMessageConverter类可以使用提供的字符集实例化。然后可以在服务的整体网关上进行设置,以便所有端点都使用所需的字符集。

衍生的解决方案是在 Spring Context 中创建一个如下所示的解决方案:

<bean id="stringHttpMessageConverter" class="org.springframework.http.converter.StringHttpMessageConverter">
<constructor-arg index="0" ref="utf8Charset"/>
</bean>

<bean id="utf8CharsetFactory" class="CharsetFactory"/>
<bean id="utf8Charset" factory-bean="utf8CharsetFactory" factory-method="createUTF8Charset" />

然后在网关中使用它,如下所示:

<http:outbound-gateway request-channel="requestChannel"
url-expression="'${bir.xml.url}' + payload.toString()" http-method="GET"
extract-request-payload="true" expected-response-type="java.lang.String"
charset="UTF-8" reply-timeout="30000" reply-channel="dtdRemovingTransformerChannel"
message-converters="stringHttpMessageConverter"
mapped-response-headers="Date, Server, Pragma, Cache-Control, SVRID, last-modified">
</http:outbound-gateway>

显然,这会在仅返回字符串的任何地方应用 UTF-8 编码,但这在应用程序中是可以接受的。

关于java - 编码问题 - 我认为 UTF-8 被视为 ISO-8859-1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22696741/

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