[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[问题求助] Node.js 如何实现类似 GRAFTABL 的效果?

本帖最后由 CrLf 于 2015-9-27 16:47 编辑

Node.js 输出到屏幕时,默认编码为 utf8,如何改为 unicode?大概类似 cmd 中 CHCP 437 之后再 GRAFTABL 936 的意思
试过下面这些方案,效果都不对,要么汉字上屏后显示为空,要么输出的仍是 utf8 字符串,感觉对 Node 的机制理解有误,求指导
  1. console._stdout._readableState.defaultEncoding  = 'utf16le'
  2. console.log('{测试}')
复制代码
  1. process.stdout._readableState.defaultEncoding = process.stdin._readableState.defaultEncoding = 'utf16le'
  2. process.stdout.write('{测试}')
复制代码
  1. process.stdout.setEncoding('utf16le').write('{测试}')
复制代码
  1. var iconv = require('iconv-lite'); //刚才忘了加 =_=
  2. output('{测试}')
  3. function output(chunk){
  4. var chunk = typeof chunk=='string' ? chunk : JSON.stringify(chunk)
  5. var str = (new Buffer(chunk,'utf8'))
  6. var buf = new Buffer(iconv.encode(str, 'gbk'),'bin')
  7. process.stdout.write(buf)
  8. return
  9. }
复制代码
------------------------------------------------------
现在只能加上 iconv 转码来实现:
  1. node xxx.js | iconv -f "utf-8" -t "gb2312"
  2. node xxx.js | iconv -f "utf-8" -t "gb2312" | more
复制代码
怎样做到不需要 iconv 也能正常显示汉字?
  1. node xxx.js
  2. node xxx.js | more
复制代码

本帖最后由 CrLf 于 2015-9-27 15:42 编辑

简单说就是既能保证汉字正常上屏,而且以 node xxx.js >test.txt 运行时又能按 Unicode(utf16le) 编码输出到文件,当然,xxx.js 并不知道当前的输出是否被重定向了
要是能是 gbk 当然更好了...

TOP

本帖最后由 CrLf 于 2015-9-27 15:43 编辑

回复 3# aa77dd@163.com


    好吧,你是对的,我被记事本带坏了
    前文的 Unicode 确切说应该是 utf16le

TOP

回复 5# yu2n


    试了下还是没能解决,改变文本编码好像只影响脚本中自带的字符串,貌似与通过 get、post、命令行参数传递进来的汉字无关

TOP

本帖最后由 CrLf 于 2015-9-27 16:51 编辑

回复 7# yu2n


因为 php 需要 iis,所以不太适合我的用途
事实上,我是想构建一个简易的跨进程、跨脚本、跨平台的脚本通信方案,从便携性和功能等方面综合考量,几种方案的优先级应该是 nodejs>nc>php>共享文件。
此处上屏的文字和 html 无关,仅仅是把两端通信的结果打印出来而已,所以我想应该是不能用 html 的办法来解决的吧,而且经过各种测试,上屏后的编码和传递给 process.stdout 的编码格式似乎也无关,大概是另有一套机制
目前已经实现主体功能,唯独此处是鱼与熊掌,要么汉字不能直接上屏,要么就输出为 utf-8 导致客户端脚本无法识别,其实不是什么很重要的问题,不过我想能完善当然最好不过的了

回复 8# aa77dd@163.com


感谢关注,不过已经试过 iconv-lite,顶楼代码 4 就是...话说我复制过来时忘了保留 require

TOP

返回列表