我从Oracle数据库中获取日语字符串并将其显示在浏览器上。但是这些字符在浏览器上显示为???。使用unistr()函数将日语字符串插入DB。
INSERT INTO MESSAGES (MESSAGE_ID,MESSAGE) VALUES (1,unistr('\0041\0063\0063\0065\0073\0073\0020\004d\0061\006e\0061\0067\0065\006d\0065\006e'));
当我打印ISO8859-1
时,我在jvm日志System.getProperty("file.encoding")
中得到了此信息。
select * from v$nls_parameters where parameter in ('NLS_CHARACTERSET')
在我的数据库中产生UTF8
。
有关如何正确显示日文字符的任何指示?
答案 0 :(得分:1)
尝试更改浏览器区域设置。你可以用Firefox做到这一点。
答案 1 :(得分:1)
就Unicode编码而言,服务器对浏览器的响应字符似乎未正确指定。如果您使用Tomcat,则有一个fairly detailed SO question on this topic。请注意,您必须使用UTF-8而不是ISO-Latin-1 / ISO-8859-1,因为日文字符不属于Latin-1字符编码。
除了有关Unicode编码的指针之外,您可能还需要检查以下几点:
如果您排除了以上所有问题,那么Unicode字符(包括日语)将被转换为不可理解的格式。
答案 2 :(得分:1)
清单:
选择 UNISTR( '\ 0041 \ 0063 \ 0063 \ 0065 \ 0073 \ 0073 \ 0020 \ 004D \ 0061 \ 006E \ 0061 \ 0067 \ 0065 \ 006D \ 0065 \ 006E') 来自双重
如果#3成功,则表中消息字段的文件编码不正确。
答案 3 :(得分:1)
您正在尝试将ISO8859-1更改为utf-8。
如果以上问题在struts中,请在您的java.jsp页面上使用此代码
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
答案 4 :(得分:0)
如果您在Web浏览器中看到???
,那么按照其他人的建议更改浏览器的区域设置/字符集确实无济于事。只有当您看到�
,空方块和/或Mojibake时,可能确实有帮助。安装字体也确实无济于事。如果没有它的字体,你会在Firefox中看到里面有十六进制代码的正方形和IE空白正方形,而不是???
。
???
只能有一个原因:您使用错误的编码将这些字符写入HTTP响应。平均网络服务器将?
替换未知字符。 webbrowser不这样做,它只是按原样显示它们。 实际上,理论上还有另一个可能的原因;当您插入未知字符时,数据库也会这样做,但这里的内容会被排除在外。
目前尚不清楚您正在使用哪种视图技术,但由于您正在谈论Java和Web浏览器,我将假设您正在使用JSP / Servlet(将来,请提及并标记,这样才能找到合适的观众。)
如果您使用JSP显示这些字符,那么您需要将以下内容添加到JSP页面的顶部,以指示servletcontainer使用正确的编码来编写这些字符:
<%@ page pageEncoding="UTF-8" %>
如果你是使用Servlet手动编写这些字符,那么你需要设置HTTP servlet响应以使用正确的编码,如下之前你写任何字符:
response.setCharacterEncoding("UTF-8");
答案 5 :(得分:0)
\0041\0063\0063\0065\0073\0073\0020\004d\0061\006e\0061\0067\0065\006d\0065\006e
似乎不是有效的日语UTF-8字符串(在UTF-8中表示"Access Managemen"
)。
如果您想在CHAR
列中插入日语字符,请尝试unistr('\306b\307b\3093\3054')
(在UTF-8中表示"にほんご"
)。resultSet.getString(2);
的返回值,您将看到插入的日语字符串。<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
。
JSP的默认编码是ISO-8859-1(参见https://docs.oracle.com/cd/E17802_01/j2ee/j2ee/1.4/docs/tutorial-update6/doc/WebI18N5.html),它无法处理日文字符。