搜索
查看: 948|回复: 5

string.load() 遇到UTF-8格式的文本,显示时都会会多显示个“?”号

[复制链接]

4

主题

24

帖子

145

积分

培训班

积分
145
发表于 2017-12-2 02:47:13 | 显示全部楼层 |阅读模式
string.load() 遇到UTF-8格式的文本文件,显示时都会会多显示个“?”号。而遇到ANSI格式的没问题。二进制文件不知道会不会受到影响?
  1. import console;
  2. var str = string.load("d:\test.txt");
  3. console.log(str);
  4. console.pause(true);
复制代码

捕获.JPG

结果:
捕获2.JPG
碰到后怎么办?怎么才能减了 ? 这个字符。

点评

同意: 1.0 反对: 5.0
真棒: 1.0 继续努力: 1.0
同意: 1 反对: 5 真棒: 1 继续努力: 1
https://www.cnblogs.com/findumars/p/3620078.html  发表于 2017-12-2 07:45
南郭先生
《韩非子·内储说上》
齐宣王使人吹竽,必三百人。南郭处士请为王吹竽。宣王悦之,廪食以数百人。宣王死,湣王立。好一一听之,处士逃。
回复

使用道具 举报

4

主题

24

帖子

145

积分

培训班

积分
145
 楼主| 发表于 2017-12-2 02:54:03 | 显示全部楼层
碰到  字符串类的 文件都会多个“?” 字符。
南郭先生
《韩非子·内储说上》
齐宣王使人吹竽,必三百人。南郭处士请为王吹竽。宣王悦之,廪食以数百人。宣王死,湣王立。好一一听之,处士逃。
回复

使用道具 举报

12

主题

679

帖子

4008

积分

荣誉会员

子非魚、安知魚之樂

Rank: 8Rank: 8

积分
4008
发表于 2017-12-2 09:35:11 | 显示全部楼层
0ximi 发表于 2017-12-2 02:54
碰到  字符串类的 文件都会多个“?” 字符。


import console;
var s = string.load("E:\desktop\test.txt");

//移除BOM 参考一下 web.json 里的源码 L266
if( s[1] == 0xEF  && s[2] == 0xBB && s[3] == 0xBF ){
    s = string.right(s,-4);
}

console.log( s )
console.pause(
true);

回复

使用道具 举报

185

主题

2541

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
13973
发表于 2017-12-2 11:27:17 | 显示全部楼层
每个帖子都这风格,以后还是不要滥用大字报,
至于怎么移除BOM,这只是一个简单的字符串截断,看一下string库函数文档你就会

1、控制台不支持UTF8( 或者说支持不好 ),只能显示ANSI字符,
aardio是将UTF8转换为ANSI后在控制台显示,所以不要纠结控制台里不能显示UT8的什么字符.......

2、所谓的BOM,实际上是个正常的字符,只是他的长度是零宽,Unicode环境下BOM不会影响显示。

3、string.load 只是负责以二进制格式加载文件,不负责帮你做别的事,不负责帮你分析处理文本格式,例如很多UTF8的处理程序 - 他就是需要BOM,例如Scriter,你把BOM移除他就会乱码。

4、aardio提供了 fsys.codepage.load() 函数可以自动识别BOM、移除BOM,或转换编码,而string.load() 不负责干这种,请使用合适的工具。


回复

使用道具 举报

4

主题

24

帖子

145

积分

培训班

积分
145
 楼主| 发表于 2017-12-2 11:33:44 | 显示全部楼层
谢谢,原来是有个"BOM"标记的原因。
南郭先生
《韩非子·内储说上》
齐宣王使人吹竽,必三百人。南郭处士请为王吹竽。宣王悦之,廪食以数百人。宣王死,湣王立。好一一听之,处士逃。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

手机版|未经许可严禁引用或转载本站文章|站长邮箱|aardio.com|aardio官方社区 ( 皖ICP备09012014号 )

GMT+8, 2018-10-20 04:26 , Processed in 0.093750 second(s), 26 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表