2010-03-09 26 views
5

我认为这是一个标准问题,以前可能已经问过这个问题,但我无法得到确切的答案,所以发布问题。在Windows和Linux之间处理输入中的换行符

问题是我们的服务器运行在Linux机器上。我们访问该服务器在浏览器上的窗口框输入数据到这是应该包含多个线,用户可以通过按每一行 美国广播公司 防守 GHI

回车键后在此输入字段(输入字段这是一个文本区域),在linux机器上读取,我们要根据新行字符拆分数据。

我对此有三个问题。

  1. 是否输入数据包含为 “\ r \ n” 或 “\ n” 个

  2. 如果输入数据不包含 “\ r \ n” 个,在linux line.separator属性(VM属性)对我来说不会像“\ n”那样工作,因此可能会在数据中留下“\ r”。

  3. 如果在数据中留下“\ r”,如果我在Windows机器上打开文件,这是否意味着换行符?

终于有谁能告诉我解决这个问题的标准方法?

+0

我认为这取决于您使用的是什么语言(是Java应用程序,HTML页面或其他内容中的“文本区域”),以及可能使用的是什么UI工具包。 – 2010-03-09 00:32:02

+0

我们使用基于java的web应用程序及其html页面。没有其他UI工具包正在使用 – Fazal 2010-03-09 04:59:57

回答

3

Linux使用\n
Windows使用\r\n

因此,除非你在linux中调整了一些东西,否则它应该在\n

你可以从正则表达式和\r\n\n用任何你想避免的问题3.

http://en.wikipedia.org/wiki/Newline

+0

是的,我们正计划这样做,但在我看来,这个问题应该有一个更通用的修复语言。由于数据在Windows上输入并在Linux服务器上读取是非常普遍的。可能是我过分的语言能力,但在每个应用程序中处理这听起来非常痛苦 – Fazal 2010-03-09 04:54:26

3

标准java.io.DataInputStreamjava.io.BufferedInputReader均通过的readLine自动处理()方法来代替。你真的不应该使用DataInputStream,因为它不能正确地支持字符集,并且它的readLine()已经被弃用很长一段时间了。

对于文本输出,您可以使用其中包含printLn()的java.io.PrintWriter以及带参数的相关方法输出当前平台的正确换行顺序。 java.io.BufferedWriter也正确处理这个问题,并提供了一个public newLine()方法。

0

大概试试这个?

String[] lines = inputString.split("\r?\n"); 

不是100%确定的语法,但正则表达式的基本思想是:“零或一个\ r,正好一个\ n”。或者,如果你只是想正常化输入:

inputString = inputString.replace("\r?\n", "\n"); 

对我来说这似乎不是很痛苦。 ;-)

+0

我同意。这不是很痛苦。但是我不喜欢使用像Java这样的语言在应用程序代码中担心新行字符的基本概念,这种语言在那里已经有足够多的时间来给出一种更好的方法来解决问题:)......尽管另一方面它的方式OS对换行符的处理方式不同,可能永远不会对可预见的未来有一个好的一致行为 – Fazal 2010-03-09 23:14:14

+0

我完全同意你的看法,但这仍然是操作系统间,网络间的问题。 HTTP要求使用“\ r \ n”来终止行,但所有* nix系统在内部使用“\ n”。或者,Windows使用整数/指针的小端编码,但是网络协议需要传输数据的大端。事实仍然存在。 ;)当我们处理这种相互关联和不同的系统时,不幸的是我们必须处理他们的怪癖。 – dimitarvp 2010-03-10 08:18:44

-1

感谢您的回应家伙..最后看看Kevin给出的建议,我们使用StringReader和BufferedReader封装来解决这个问题。我们使用字符串阅读器,因为数据是从请求中读取的字符串。

希望这个问题能帮助人们在未来

+2

当您无需添加任何内容时,请不要在您自己的问题上发布答案。这是什么意见... – 2010-03-09 17:30:20

1

而不是使用正则表达式,你也可以将其简单的做这样的事情。

StringBuilder sb=new StringBuilder(); 
// append your texts here and to go to a new line use 
    if(System.getProperty("os.name").startsWith("Windows")){ 

       sb.insert("\r\n"); 
      } 
      else { 
      sb.insert("\n"); 
    } 

所以,如果你的本地环境是Windows,你也可以让当地的工作,也将工作,如果你要部署到不同的基于Linux的环境。

相关问题