【问题标题】:jsp - Post request with unicode (hebrew letters) not showing correctlyjsp - 未正确显示 unicode(希伯来字母)的发布请求
【发布时间】:2015-12-29 12:03:17
【问题描述】:

我正在尝试使用 jsp 通过 post 传递表单,其中的数据填充了希伯来字母。

我不知道如何解决它。我只是想让文本正常显示。我的代码:(代码在一个名为 newgame.jsp 的 jsp 文件中)

<form id="creategame" action="newgame.jsp" method="post">
    //Form containing a bunch of inputs which can have hebrew outputs
</form>

我收到的输入:

<%
if(request.getParameter("gamename")!=null){
    String gameName = (String)request.getParameter("gamename");
    String minKita = (String)request.getParameter("minkita");
    String maxKita = (String)request.getParameter("maxkita");
    String gameDesc = (String)request.getParameter("gamedesc");
    String gameZiood = (String)request.getParameter("gameziood");
    System.out.println(gameName+" - "+minKita+" - "+maxKita+" - "+gameDesc+" - "+gameZiood);
    //Upload it to the database...
    response.sendRedirect("gamesdb.jsp");
}
%>

基本上:

אבגדהוזחטיכלמנסעפצקרשת 在控制台中变成??????????????????????,在数据库/网站中变成àáâãäåæçèéëìîðñòôö÷øùú。 但是,在“问号”的控制台打印字符数据后,我可以看到它实际上是àáâãäåæçèéëìîðñòôö÷øùú,而不仅仅是一堆问号。

那么我将如何在我的发布请求中传递数据以使其保持原始文本?

提前致谢,NonameSL。


编辑:我正在使用编码windows-1255,我知道它可以正确显示希伯来字母。


编辑 2: 我尝试使用以下内容:

public String toHebrewString(Object o){
        try{
            return new String(((byte[])o), "UTF-8");
        }catch(Exception unexpected){
            return (String)o;
        }
    }

这显示了完全相同的结果。问题可能出在我的表格上吗?

【问题讨论】:

  • 如果你用new String((byte[])request..., "UTF-8);代替(String)...怎么办?
  • 取一小串说一个字母。将其字符转储为整数(十六进制)值。并从那里开始整个轨迹。如果您对页面和表单数据正确使用 UTF-8,则控制台可能会错误地将字符串(内部 Unicode)转换为 Latin-1,并将不可转换的字符表示为问号控制台无关,转储为十六进制以获取信息。对数据库进行相同的检查。
  • 您的 jsp 文件使用哪种编码方式? Tomcat 和其他应用程序服务器将使用基于底层平台的编码(静态 servlet 将使用此默认编码,但您可以在自己的 servlet 或 Tomcat 的 web.xml 文件(默认 servlet 使用)中更改它)
  • @JoopEggen 好吧,我尝试从 post 请求中获取希伯来语信息并将 char 信息打印为十进制,例如对于字母 א 它显示 224 这是字符 à 和不是原来的性格。会不会是我的表格有问题?

标签: java jsp unicode hebrew


【解决方案1】:

看到 String "א" 包含一个整数值为 224 的字符,出现以下错误:

  • Windows 上的希伯来语单字节编码是 Windows-1255,(byte)224 是 א。

  • 由于 String/char 应该保存 Unicode 格式的文本,字节到字符串的转换出错了。

  • 检查:

    request.setCharacterEncoding("Windows-1255"); // Once at request begin
    String gameName = request.getParameter("gamename");
    ...
    

    但是,您不希望对正在处理的每个返回的表单都重复此操作。

  • 解决方案:如果这是一个纯希伯来语网站,您可能会使用 Windows-1255,但更常用的是编码为 UTF-8 的完整 Unicode。如何用UTF-8的表单呈现HTML,接受表单数据返回的UTF-8等等,可以在网上找到。

响应编码也很重要。数据库等也是如此。

【讨论】:

  • 谢谢!我确实将字符编码放在页面顶部,但由于某种原因,当我放置 request.setCharacterEncoding() 方法时它起作用了。另外,我的网站 99% 是纯希伯来语,但我正在将其更改为 UTF-8(只是为了确保它正确显示所有内容),谢谢提醒!
  • 也可以在服务器中全局配置(取决于哪一个)。 &lt;form accept-charset=...&gt; 阻止从表单接收 &amp;#1234;。
猜你喜欢
  • 2012-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-10
相关资源
最近更新 更多