gpt4 book ai didi

java - HttpServletRequest.getParameter() 接收 "\r\n"用于 textarea 字段中的每一行

转载 作者:塔克拉玛干 更新时间:2023-11-02 18:58:54 27 4
gpt4 key购买 nike

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

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

我该如何解决这个问题?是因为 HTML header 的字符集 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");
}
}

最佳答案

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

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

作为 Java Web 开发人员,您不一定需要担心这一点。服务器只是准确地检索客户端发送给它的数据。重新显示客户端数据时,这两种换行形式在大多数(如果不是所有)现代平台上都应该可以正常显示。

如果您遇到问题,那么您可能做事的方式不对。例如,也许您正在拆分 \n只是为了获得导致 \r 的行数组未受影响。在这种情况下,您最好使用 BufferedReader 相反,它将同时处理 \n\r\n readLine() 中透明方法。

例如

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响应 header 将覆盖任何<meta http-equiv="content-type"> . <meta>标签仅在从本地磁盘文件系统查看页面时使用。要了解有关字符编码的更多信息,请参阅 this article (同样,这与您的具体问题无关)。

关于java - HttpServletRequest.getParameter() 接收 "\r\n"用于 textarea 字段中的每一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9560454/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com