2014-03-19 44 views
2

我对将字符串写入标准输出的可移植方式感兴趣,没有在最终添加隐含换行符,理想情况下强制编码为UTF-8,可与如何将字符串写入Javascript的标准输出

  • jrunscript(来自任何JDK)
  • 犀牛
  • 的node.js

我当前的代码尝试检测它正在运行,则使用特定于平台的写入方法:

if (typeof process !== "undefined") {  // assume node.js 
    var log = function(string) {process.stdout.write(string);}; 
    } 
    else if (typeof println == "undefined") { // assume rhino 
    var log = function(string) {java.lang.System.out.write(java.lang.String(string).getBytes("utf-8"));}; 
    } 
    else {         // assume jrunscript 
    var log = function(string) {java.lang.System.out.print(string);}; 
    } 
    log("X"); 
    log("Y"); 

应该导致:

XY 

可以这样做的更好?

对于jrunscript,我一直使用函数print,但是它代表JDK-8021773在JDK-8中改变了它的行为。

+0

我想你会*需要*平台特定的代码 – Bergi

+0

我在我的项目中有类似的代码。请注意,你也需要在Nashorn上进行测试。 (Java 8捆绑了Nashorn,而不是Rhino。) –

+0

@SethTisue,谢谢你的提示。事实上,将JDK升级到8版让我再次考虑这一点。此外,犀牛及其(之前的8)JDK风味已经需要在这方面加以区分。 – Gunther

回答

3

我有兴趣编写 字符串到标准输出的便携方式,无需换行隐含加入到结束,非常迫使 编码设置为UTF-8,与任一作品...

没有,因为JavaScript没有“系统apis”。 JS核心是有限的,你需要使用JavaScript引擎运行的环境中可用的API。

我当前的代码会尝试检测它正在运行,然后使用 平台特定的写入方法。但我宁愿摆脱这一点。

这是你唯一能做的事情。

编辑:JavaScript规范在这里:http://es5.github.io/它很短,有0标准输出或标准输入的概念,因为没有JavaScript标准库。

+0

好的,谢谢。所以我会保留我的平台区别码,如问题所示。 – Gunther

相关问题