HttpServletRequest.getParameter()为textarea字段中的每个新行接收“\ r \ n”

时间:2012-03-05 01:01:25

标签: java string servlets character-encoding newline

我有一个HttpServletRequest,它从HTML-textarea接收“String myString”。我遇到的问题是,每当我在textarea中写一个文本时,对于每一个新行,“String myString”都会收到一个“\ r \ n”而不是一个“\ n”。请参阅下面的代码。

编辑:我在HTML文件中包含了示例函数readText()。在那里,数据变量获得新行,就像“\ n”一样。只有当它变成“\ r \ n”时才从HttpServletRequest接收它。问题是我真的需要它只是“\ n”,因为我不应该得到任何额外的字节而不是原始文本。

我该如何解决这个问题?是因为HTML标题中的字符集UTF-8?

谢谢你,

MyServlet.html

<meta http-equiv="content-type" content="text/javascript; charset=UTF-8">
// [...]
<form action="servlet" method="POST" name="formIn">
<textarea name="originalScript" COLS=50 ROWS=25></textarea>
</form>

<script type="text/javascript" charset="UTF-8">
function readText() {
  var s = document.formIn.originalScript.value;
  var data = (s + "").split("");
};
</script>

MyServlet.java

public class MyServlet extends HttpServlet 
{
  public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException 
  {
    String myString=req.getParameter("originalScript");
  }
}

1 个答案:

答案 0 :(得分:3)

这不依赖于使用的字符编码。这取决于所使用的客户端平台。当客户端使用Windows操作系统时,每个换行符由\r\n(CR + LF,回车符和换行符)表示。当客户端使用基于Unix的操作系统(如Linux,Max OS X,FreeBSD,BeOS等)时,每个换行符都由\n(LF,换行符)表示。还有使用\r\n\r的平台,例如Commodore,Apple II,Acorn等,但这些平台被认为是古老的,现在不再可能使用了。

请注意,\n在Windows中显示为完全正确的换行符,并且\r\n也应该在Unix中显示为正常的换行符。 Windows使用\r\n仅仅是由于历史原因,并且Windows仍然使用它是由于向后兼容性原因。

作为Java Web开发人员,您不一定需要担心这一点。服务器只是检索客户端发送给它的数据。在重新显示客户端数据时,两个换行表单应该在大多数(如果不是全部)现代平台中都能正常显示。

如果你遇到问题,那么你可能做错了。例如,您可能只是在\n上拆分,只是为了获得一系列导致\r不受影响的行。在这种情况下,您最好使用BufferedReader,而readLine()方法会透明地处理\n\r\n

E.g。

BufferedReader reader = new BufferedReader(new StringReader(string));
List<String> lines = new ArrayList<String>();

for (String line = null; (line = reader.readLine()) != null;) {
    lines.add(line);
}

// ...

或者,当您使用\n替换<br/>字符串以在HTML标记中显示换行符时,您还可以考虑使用CSS white-space: pre;代替包含文本的父HTML元素。

另见:


对于具体问题

无关,您的<meta>标记对于HTML网页无效。它应该是text/html。此外,当页面由HTTP请求提供时,Content-Type响应标头将覆盖任何<meta http-equiv="content-type"><meta>标记仅在从本地磁盘文件系统查看页面时使用。要了解有关字符编码的更多信息,请参阅this article(再次,无关到您的具体问题)。