Java HttpServletRequest.getParameter()正在接收\r\n“;对于textarea字段中的每一新行

Java HttpServletRequest.getParameter()正在接收\r\n“;对于textarea字段中的每一新行,java,string,servlets,character-encoding,newline,Java,String,Servlets,Character Encoding,Newline,我有一个HttpServletRequest,它从HTML-textarea接收“String myString”。我遇到的问题是,每次我在textarea中写入文本时,对于每一行,“String myString”都会收到一个“\r\n”,而不仅仅是一个“\n”。请参阅下面的代码 编辑:我在HTML文件中包含了示例函数readText()。在这里,数据变量获取新行,如“\n”。只有当从HttpServletRequest接收到它时,它才会变为“\r\n”。问题是我真的需要它只是“\n”,因为我

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

编辑:我在HTML文件中包含了示例函数readText()。在这里,数据变量获取新行,如“\n”。只有当从HttpServletRequest接收到它时,它才会变为“\r\n”。问题是我真的需要它只是“\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>

这并不取决于所使用的字符编码。这取决于所使用的客户端平台。当客户端使用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
未被触及。在这种情况下,您最好改为使用,它将在方法中透明地处理
\n
\r\n

例如

BufferedReader=new BufferedReader(new StringReader(string));
列表行=新的ArrayList();
for(String line=null;(line=reader.readLine())!=null;){
行。添加(行);
}
// ...

或当您通过<代码> > BR/><代码>字符串替换“代码”>“BR/><代码>,以获得在HTML标记中显示的换行符时,您也可以考虑使用CSS <代码>空白:Prime/<改为在包含文本的父HTML元素上使用code>

另见:


与具体问题无关,
标记对于HTML页面无效。它应该是
text/html
。此外,当页面由HTTP请求提供服务时,
内容类型
响应头将覆盖任何
标记仅在从本地磁盘文件系统查看页面时使用。要了解有关字符编码的更多信息,请参阅(同样,这与您的具体问题无关)。

这非常有用,谢谢。请参阅上面的新编辑和注释,因为我也在Windows上从HTML读取相同的文本。它仅依赖于客户端平台并不完全正确。我目前正在处理一个错误,该错误是由于在textareas中输入时表示换行符的方式发生了变化而引入的,我有一个应用程序版本提交它,\n还有一个应用程序版本提交它\r\n。相同的浏览器,相同的环境,实际上是相同的计算机。所以有一种方法可以覆盖它,现在我只需要想办法。。
public class MyServlet extends HttpServlet 
{
  public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException 
  {
    String myString=req.getParameter("originalScript");
  }
}
BufferedReader reader = new BufferedReader(new StringReader(string));
List<String> lines = new ArrayList<String>();

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

// ...