gpt4 book ai didi

servlets - 更改 Glassfish Servlet 编码/字符集

转载 作者:行者123 更新时间:2023-12-04 16:09:40 25 4
gpt4 key购买 nike

我正在向 Glassfish 4.1 服务器上的 Servlet 发送一个可序列化对象,该对象具有带阿拉伯字符的字符串字段,当我尝试记录我得到的阿拉伯值时 (?????)

我读过 ThisThis和许多其他帖子,但没有解决问题,我在 Tomcat 8 服务器上尝试了相同的代码,它工作正常

我应该如何处理 Glassfish 服务器或我的 Servlet 才能正确读取 UTF-8 字符?

发送Serializable对象:

        url = new URL(ServerInfo.STORABLE_RECEIVER_URL);            
http = (HttpURLConnection) url.openConnection();
http.setRequestProperty("content-type", "application/x-object; charset=utf-8");
http.setRequestProperty("Accept-Charset", "UTF-8");
http.setDoOutput(true);
http.setDoInput(true);
out = new ObjectOutputStream(http.getOutputStream());
out.writeObject(t);

web.xml

<filter>
<filter-name>Set Response Character Encoding</filter-name>
<filter-class>net.abdullahcodes.serv.MyFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>

<filter-mapping>
<filter-name>Set Response Character Encoding</filter-name>
<url-pattern>/TradableReceiver</url-pattern>
<url-pattern>/*</url-pattern>
<url-pattern>/</url-pattern>
</filter-mapping>

<locale-encoding-mapping-list>
<locale-encoding-mapping>
<locale>ar</locale>
<encoding>UTF-8</encoding>
</locale-encoding-mapping>
<locale-encoding-mapping>
<locale>en</locale>
<encoding>UTF-8</encoding>
</locale-encoding-mapping>
</locale-encoding-mapping-list>

我的过滤器

复制自 Omri Spector 在 This 上的回答

glassfish-web.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE glassfish-web-app PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Servlet 3.0//EN" "http://glassfish.org/dtds/glassfish-web-app_3_0-1.dtd">
<glassfish-web-app>
<jsp-config>
</jsp-config>
<parameter-encoding default-charset="UTF-8" />
</glassfish-web-app>

Servlet 测试收到 Serializable 对象:

        log("sys: "+System.getProperty("file.encoding"));
log("def: "+Charset.defaultCharset());
log("size: "+b.totalRowsCount()+", "+b.totalColumnsCount());
log("test arabic: هلوووووووووويااا");
System.out.println("test sysout: اوووه خطبها نصيب");
while (b.hasNext()) {
Position p = new Position();
p.setEn(b.next());
p.setAr(b.next());
log("p: "+p.toString());
}

Glassfish 上的控制台输出:

log():net.abdullahcodes.serv.TradableReceiver: sys: Cp1252
log():net.abdullahcodes.serv.TradableReceiver: def: windows-1252
log():net.abdullahcodes.serv.TradableReceiver: size: 4, 2
log():net.abdullahcodes.serv.TradableReceiver: test arabic: ????????????????
Info: test sysout: ????? ????? ????
log():net.abdullahcodes.serv.TradableReceiver: p: id: 0, en: fatima, ar: abod
log():net.abdullahcodes.serv.TradableReceiver: p: id: 0, en: maryam, ar: nora
log():net.abdullahcodes.serv.TradableReceiver: p: id: 0, en: ????, ar: ????
log():net.abdullahcodes.serv.TradableReceiver: p: id: 0, en: ????, ar: ????

Tomcat 上的控制台输出:

log INFO: net.abdullahcodes.serv.TradableReceiver: sys: UTF-8
log INFO: net.abdullahcodes.serv.TradableReceiver: def: UTF-8
log INFO: net.abdullahcodes.serv.TradableReceiver: size: 4, 2
log INFO: net.abdullahcodes.serv.TradableReceiver: test arabic: هلوووووووووويااا
test sysout: اوووه خطبها نصيب
log INFO: net.abdullahcodes.serv.TradableReceiver: p: id: 0, en: fatima, ar: abod
log INFO: net.abdullahcodes.serv.TradableReceiver: p: id: 0, en: maryam, ar: nora
log INFO: net.abdullahcodes.serv.TradableReceiver: p: id: 0, en: احمد, ar: صالح
log INFO: net.abdullahcodes.serv.TradableReceiver: p: id: 0, en: حسين, ar:

最佳答案

您需要设置命令行属性:

 -Dfile.encoding=UTF-8

启动 Glassfish 时。

如果您从 IDE 启动,则需要将此设置添加到启动配置。

如果 Glassfish 作为服务启动,那么您需要设置一个环境变量:

 JAVA_TOOL_OPTIONS=-Dfile.encoding=UTF-8

关于servlets - 更改 Glassfish Servlet 编码/字符集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44641628/

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