无 BOM 的 UTF-8 转换为 GBK:file.open(f,"r:utf-8:gbk") 带 BOM 的 UTF-8 转换为 GBK:file.open(f,"r:bom|utf-8:gbk") 但是如果一个文件夹中有的是带 BOM 的,有些是不带 BOM 的 utf-8,怎么判断并读取???
貌似需要判断文件头的前几个字节来区分是否带 BOM
File.open 会自动判断是否带 bom 并跳过
#2 楼 @luikore 貌似不行吧。
#3 楼 @bluexuemei 大概我记错了... 这样?
File.open(f, "r:utf-8", &:read).sub(/\A\xEF\xBB\xBF/, '').encode 'gbk'
#4 楼 @luikore Dir.glob('.txt').each{|f|a+=open(f,'r:bom|utf-8',&:readlines)};a.map{|line|line.encode('gbk')}这样可以运行 说明 File.open 会自动判断是否带 bom 并跳过,谢谢! 但是为什么 Dir.glob('.txt').each{|f|a+=open(f,'r:bom|utf-8:gbk',&:readlines)}这样写却不对?不带 BOM 的显示乱码