Open liujiusheng opened 3 years ago
紧接上一期工作继续。
Mapserver一种比Geoserver更好用的GIS引擎(一、技术方案探索)
cmd和powershell的问题今天又搞了一天,有点浪费时间。
初步怀疑是字符集的问题,但是查看了cmd和powershell的字符集,都是936 简体中文GBK
于是分别在cmd和powershell中执行,然后直接用vscode打开txt查看字符编码来排查问题: ping www.baidu.com -t > atest.txt
ping www.baidu.com -t > atest.txt
结果发现,powershell输出的txt打开后vscode显示为UTF-16 LE CMD输出的txt打开后vscode显示为UTF-8
所以问题还是出在了字符集上,cmd看起来配置上默认是GBK,但实际输出是utf-8,powershell看起来配置上默认是GBK,但实际输出是utf-16 le。
值得说一下的是,这个输出的字符集使用chcp 65001是改不了的,不知道具体原因。
顺手百度了一下“utf-16 le utf-8”,要补充的知识还挺多,直接引用别人写好的吧。
参考: http://www.360doc.com/content/11/1215/13/2036337_172427020.shtml
那目前就只有三个方法:
一是让node.js默认调用cmd.exe执行,
二是在node.js中动态修改powershell的输出字符集,
三是在node.js中用脚本动态转换字符集。
前两种方法大概率要从系统上去修改,所以我选择第三种方法。 关键的几行代码:
const result = await spawnSync('./cgi-bin/mapserv.exe', ["-nh","QUERY_STRING=map=./local-demo/local.map&layers=ocean%20countries%20lakes%20ocean-labels%20places&mode=map&map_imagetype=png&mapext=-180.3006+-120.2004+180.3006+120.2004&imgext=-180.3006+-120.2004+180.3006+120.2004&map_size=600+400&imgx=300&imgy=200&imgxy=600+400"]); const stdout = Buffer.from(result.stdout, 'utf16le'); this.ctx.set('Content-Type','image/png'); this.ctx.body = stdout;
Mapserver一种比Geoserver更好用的GIS引擎(Node.js包装初探)
后面可直接使用的成果套件研究出来后我也将在这儿发布。
紧接上一期工作继续。
Mapserver一种比Geoserver更好用的GIS引擎(一、技术方案探索)
2021-8-29更新问题排查
cmd和powershell的问题今天又搞了一天,有点浪费时间。
初步怀疑是字符集的问题,但是查看了cmd和powershell的字符集,都是936 简体中文GBK
于是分别在cmd和powershell中执行,然后直接用vscode打开txt查看字符编码来排查问题:
ping www.baidu.com -t > atest.txt
结果发现,powershell输出的txt打开后vscode显示为UTF-16 LE CMD输出的txt打开后vscode显示为UTF-8
所以问题还是出在了字符集上,cmd看起来配置上默认是GBK,但实际输出是utf-8,powershell看起来配置上默认是GBK,但实际输出是utf-16 le。
值得说一下的是,这个输出的字符集使用chcp 65001是改不了的,不知道具体原因。
顺手百度了一下“utf-16 le utf-8”,要补充的知识还挺多,直接引用别人写好的吧。
参考: http://www.360doc.com/content/11/1215/13/2036337_172427020.shtml
那目前就只有三个方法:
一是让node.js默认调用cmd.exe执行,
二是在node.js中动态修改powershell的输出字符集,
三是在node.js中用脚本动态转换字符集。
前两种方法大概率要从系统上去修改,所以我选择第三种方法。 关键的几行代码:
原文地址:
Mapserver一种比Geoserver更好用的GIS引擎(Node.js包装初探)
后面可直接使用的成果套件研究出来后我也将在这儿发布。