【发布时间】:2016-07-25 23:15:20
【问题描述】:
我在获取 html 页面以获取卢比符号 (₹) 并将其存储到 SQL Server 2016 数据库中然后检索它以进行显示时遇到了困难。
这里需要注意的是我需要输入实际的符号而不是html版本。
该页面的基本流程是管理员可以通过 Web 界面向应用程序添加新货币。有一个文本框,其中 他们将输入实际的卢比符号₹并点击提交。然后通过 HttpServletRequest 将参数传递给 java 后端。 Java 后端只是在字段 nchar(10) 中将此值插入/更新到 SQL Server 2016 表中。
当页面刷新时,它会针对该表运行选择并显示所有有效货币。
问题在于,当 Java 应用程序从 HttpServletRequest 请求对象中检索时,符号 ₹ 变为 â?¹。我可以在 调试器,我很感激这可能是由于我的调试器无法显示它,所以我继续前进。
java (jdbc) 更新字段。我使用 Sql Server Management Studio 查看该字段,它在文本和网格视图中都显示 â?¹。 我知道 SSMS 可以显示此符号,因为我可以直接插入它并且它可以工作。所以看起来信息在 html>java 请求中丢失了。
网页本身是遗留的,并使用 xslt 构建。我在下面添加了更多详细信息,说明我的目标。
网站运行在tomcat 8上,页面使用xslt搭建,后端是java。
在前端,我在 EditCurrency 页面中有一个文本字段。我在符号字段中输入 ₹ 并点击提交。
用于构建前端的xslt页面的相关片段有:
<!--header indicates page is utf8-->
<xsl:param name="csrfToken"/>
<xsl:param name="currencyFormatError"/>
...
<!-- on submission the EditCurrency java class is called. method=POST indicates it should allow UTF8 request URL's as is my understanding-->
<form id="cmanager" name="cmanager" onsubmit="return(vNewCurrency())" action="../servlet/webpay.website.admin.EditCurrency" method="POST">
<input name="csrfToken" type="hidden" value="{$csrfToken}"/>
<table width="100%" cellpadding="0" cellspacing="0" border="0">
tomcat 8 服务器的 server.xml 设置为编码 UTF-8。我了解这允许请求/响应处理 UTF-8:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URIEncoding="UTF-8" />
Java 类 EditCurrency:
//Retrieves symbol from the HttpServletRequest req
//symbol returns â?¹
String symbol = (String) getParameter(PARAM_SYMBOL);
我也尝试使用以下方法设置 HttpServletRequest req,但它什么也没做:
try {
req.setCharacterEncoding("UTF-8");
} 捕获(UnsupportedEncodingException ex){
java.util.logging.Logger.getLogger(EditCurrency.class.getName()).log(Level.SEVERE, null, ex);
}
Sql 服务器:
值 â?¹ 出现在 nchar(10) 字段中。
显示html:
â?¹ 会在使用此更新值引用屏幕时显示。
所以问题是我该如何解决这个问题!!??
我曾考虑过某种所有货币及其显示值等的参考表,但这似乎不是正确的做法。
【问题讨论】:
标签: java sql-server tomcat xslt currency