aardio 官方社区

 找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 15203|回复: 4

求助:如何用 string.load 读取UTF-8 BOM 和无BOM的文件呢?

[复制链接]

11

主题

32

回帖

336

积分

二级会员

积分
336
QQ
发表于 2011-12-22 13:33:01 | 显示全部楼层 |阅读模式
求助:如何用 string.load 读取UTF-8 BOM 和无BOM的文件呢?
main22.htm 分别尝试用 utf-8 无bom或者标准utf-8保存
  1. <html>
  2. <head>
  3. <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
  4. <style>
  5. @import "styles/master.css";
  6. @import "styles/main1.css";
  7. </style>
  8. </head>
  9. <body id="body">
  10. 测试中文s
  11. <br />
  12. test

  13. <popup>
  14. <menu .context id="popMenu">
  15. <li id="mnAbout">关于</li>
  16. <li id="mnClose">关闭程序</li>
  17. </menu>
  18. </popup>

  19. </body>
  20. </html>
复制代码

str = string.load("/res/main22.htm");
str = string.fromto(str);
当 main22.htm是utf-8格式保存的时候, 用 string.fromto ,输出的str 为?<html>,等于多了个?号,而因为测试有限,觉得也不该单纯的删除fromto后第一个字符来实现吧?

当 main22.htm是utf-8 无bom 格式保存的时候, 用 string.fromto ,输出的str 为<html> 就和源文件一摸一样了。

该怎样考虑写个函数来判断文件的编码格式并处理呢? 求解,谢谢






5

主题

429

回帖

2420

积分

五级会员

积分
2420
发表于 2011-12-22 15:59:02 | 显示全部楼层
import fsys.codepage;

str = fsys.codepage.load(
"/utf8file.html","UTF-8")

5

主题

429

回帖

2420

积分

五级会员

积分
2420
发表于 2011-12-22 16:00:30 | 显示全部楼层
本帖最后由 神码 于 2011-12-22 16:01 编辑

文件操作相关的需求,可以到标准库的fsys下面找找,
fsys.codepage 用于转换文件内码, 可以看看该库的源码了解相关的一些技术.

13

主题

109

回帖

971

积分

三级会员

积分
971
发表于 2018-3-26 13:04:33 | 显示全部楼层
删除BOM头即可:
  1. str = string.replace(string.load("/res/main22.htm"), '^\xef\xbb\xbf', "" );
复制代码

166

主题

2154

回帖

1万

积分

管理员

积分
13056
发表于 2018-3-26 17:05:21 | 显示全部楼层
如果是你自己创建的文件,不添加BOM就可以了,对于默认就支持UTF-8的环境,BOM是多余的。

如果是外部来源的文件,用 fsys.codepage.load() 去加载就可以了,对方的文件BOM并不一定是UTF8,
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

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

GMT+8, 2025-3-21 14:57 , Processed in 0.062998 second(s), 23 queries .

Powered by Discuz! X3.5

Copyright © 2001-2024 Tencent Cloud.

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