2

我正在尝试从 windows dart vm 输出带有 *nix 行结尾的文本,它似乎总是用 \r\n 替换 \n:

#!/usr/bin/env dart

# foo.dart

import 'dart:io';

main() {
  stdout.write('a\nb\nc\n');
  stdout.write('a\x0Ab\x0Ac\x0A');
}

这是我从 cygwin 运行时得到的

$ foo.dart | foo.txt
$ cat -A foo.txt
a^M$
b^M$
c^M$
a^M$
b^M$
c^M$

有没有办法在没有自动回车插入的情况下输出文本?

4

1 回答 1

4

问题是标准输出默认以文本模式打开,在这种模式下,Windows 本身会自动将 LF 转换为 CRLF。

如果它是 C/C++,一般来说,您将能够使用 _setmode 将 stdout 切换到二进制模式(请参阅C 如何在不更改为 CR LF 的情况下将 LF 输出到 stdout?)。

在 Dart 中,您无权访问该 API 函数。

我会在 dartbug.com/new 上提出这个要求。

于 2014-06-10T01:05:46.130 回答