我有一个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");
}
}
答案 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(再次,无关到您的具体问题)。