【问题标题】:How to handle \n, \r and \r\n on different operating systems?如何在不同的操作系统上处理\n、\r和\r\n?
【发布时间】:2018-04-07 19:10:03
【问题描述】:

在 Windows、Mac 和 Linux 上处理换行的正确方法是什么。假设我有一个简单的 web 应用程序,它有一个 textarea,我需要对每个新行进行字符串拆分。在处理 textarea 的内容之前将 \r\n 和 \r 转换为 \n 是否安全,或者我是否需要检测用户所在的操作系统并对每个操作系统应用条件语句?

示例代码

var content = $('textarea').val();
    content = content.replace(/\r\n|\r|\n/gm, "\n");
    content = content.split("\n");

// Do Something

   content = content.join("\n");

// Update content
$('textarea').val(content);

【问题讨论】:

  • 只需在\n 上进行拆分,然后收工。如今,仅\r 就非常罕见。在\n 上拆分也会捕获\r\n
  • 所有当前的 JavaScript 引擎都使用 \n 作为换行符,用于读写目的。即使您使用,例如从不同来源将文本复制并粘贴到文本区域中,浏览器也负责处理此问题,并以 \n 换行符呈现您的脚本,仅此而已。

标签: javascript jquery


【解决方案1】:

不只是用 '\n' 编写代码就足够了。 因为从 textarea 获取文本意味着导出到可以表示为文件或其他任何内容的文本形式,然后如此 来自https://en.wikipedia.org/wiki/Newline

在文本模式下写入文件、设备节点或套接字/fifo 时,'\n' 被透明地转换为由 系统,可能超过一个字符。阅读文本时 模式下,本机换行序列被转换回 '\n'。在 二进制模式,不执行翻译,并且内部 '\n' 产生的表示直接输出。

这很大程度上取决于你想用它做什么。如果您将其发送回您的服务器,那么它取决于您是否要将其作为文件导出给用户,那么它就是操作系统。但通常只使用 '\n' 几乎总是安全的,因为它更常见且被普遍接受。

$(function(){
var $text = $("#text");
  $text.val( $text.val() + "Hello \nThis is '\\r' a \r" + // here
                  "multi-line (\\r\\n) \r\n text with" + // here CRLF
                  " differents \n linefeeds" );
  var s = $text.val().split('\n');
  // notice line 3 on output, it's been feed by '\r'
  // and we split only by '\n' 
  $text.val( s.map( (ss,n) => n + "\t" + ss ).join("\n") );
  $("#wonder").on("click",function() {
    $text.val( $text.val().split("\n").join("\t\\r\r") );
    // var s = $text.val();
    // either sending it via AJAX or
    // export it to user, it's safe to go with '\n' .
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<textarea id="text" rows="7" cols="37"> Hey<br>there\n

</textarea> <br>
<button id="wonder">wonder</button>

【讨论】:

  • 这句话来自关于 C 语言的部分。问题不是使用 C,而是 JavaScript,不是写入“文件、设备节点或套接字/fifo”,而是写入 DOM/HTML 中的节点。
  • 这似乎与与操作系统交互有关,但与浏览器中的 JS 无关(暗示被标记为 [jquery] 的任务)
  • @nullqube 处理它的时间是它被渲染到屏幕上的时间(取决于操作系统 - 在 UNIX 系统上,X 服务器不是核心操作系统的一部分)和问题是关于在内存中处理它,我相信浏览器或.JavaScript 运行时会对其进行规范化,但这与该引用无关。
  • Freetype 或任何仍然不是操作系统的东西。用户将其放入 Textarea 中。在 Textarea 中,
    不是换行符,但通过 jQuery 放入 Textarea 的“
    ”将呈现为这四个字符。这一切都没有回答是否保证换行符将被任何适用的标准或事实上的所有值得注意的实现表示为 \n 或 \r\n。
猜你喜欢
  • 1970-01-01
  • 2011-06-03
  • 1970-01-01
  • 2020-03-31
  • 2012-05-07
  • 1970-01-01
  • 1970-01-01
  • 2013-09-30
  • 1970-01-01
相关资源
最近更新 更多