从Web解析日文文本不能提供正确的字符

时间:2013-11-15 14:46:52

标签: java html rest tomcat utf-8

我有一个在Tomcat中运行的servlet,它接受表单数据输入。

当我输入日文字符时,它们显示为字符串,

ベースにチェ

这是正确的,但是当我尝试使用charAt解析字符串时我得到了

ベースにチェ

如果我在Java客户端(swing)中输入相同的输入,则chatAt返回

ベースにチェ

所以,某些地方出了问题,但我不太了解utf-8或unicode,所以我不知道如何修复它?

html页面基本上是

<!DOCTYPE HTML>
<html>
<head>
<meta charset="UTF-8">
<form action="ChatServlet" method="post">
<input type="text" name="input">
<input type="submit" name="Submit" value="Submit">

在我使用的servlet中,

String input = (String)request.getParameter("input");
char next = input.charAt(0);

和下一个=='&amp;'不是'ベ'

但是下一步==''''

我想'ベ',而不是'&amp;'

1 个答案:

答案 0 :(得分:0)

好的,终于回到了这个并弄清楚了。有几个问题, 这是详细信息,希望这将为其他人节省我想到的乐趣。

步骤1 - 确保您的html / jsp页面设置为UTF-8

<head>
    <meta charset="UTF-8">
</head>

步骤2 - 将以下内容添加到jsp页面的顶部

<%@ page contentType="text/html; charset=UTF-8" %>

第3步 - 在您的Servlet中,doPost或doGet确保您执行以下第一行代码(或使用过滤器)

request.setCharacterEncoding("utf-8");

对于POST来说,这会让事情变得有效,但是GET仍然无法正常工作。

步骤4 - 在您的Tomcat server.config中设置URIEncoding

<Connector port="80" protocol="HTTP/1.1"
    connectionTimeout="20000"
    redirectPort="9443"
    URIEncoding="UTF-8"/>

现在一切都应该有效。 从休息服务中读取数据时我还有另一个问题。 这是我修复它的方式,

Reader reader = new InputStreamReader(get.openStream(), "UTF-8");

如果你没有将流包装在带有charset的阅读器中,它将无法工作。

希望这有助于其他人。