版本1:
MsgBox % FileGetFormat("C:\Users\Dianbo\Desktop\你的文本.txt")
; 如果文本没有带编码标签,则无法正确读出
FileGetFormat(file){
static BOM:={254_255:"UTF-16 BE",255_254:"UTF-16 LE",239_187_191:"UTF-8",0_0_254_255:"UTF-32 BE"
,255_254_0_0:"UTF-32 LE",43_47_118_43:"UTF-7",43_47_118_47:"UTF-7",43_47_118_56:"UTF-7"
,43_47_118_57:"UTF-7",221_115_102_115:"UTF-EBCDIC",132_49_149_51:"GB 18030"}
If ("D"!=aFormat:=A_FormatInteger)
SetFormat,Integer,D
f:=FileOpen(file,"rw"),f.Pos:=0
BOM4:=(BOM3:=(BOM2:=f.ReadUChar() "_" f.ReadUChar()) "_" f.ReadUChar()) "_" f.ReadUChar(),f.Close()
If (aFormat!="D")
SetFormat,Integer,%aFormat%
FileRead,f,*c %file%
If BOM.HasKey(BOM4)
return BOM[BOM4]
else if BOM.HasKey(BOM3)
return BOM[BOM3]
else if BOM.HasKey(BOM2)
return BOM[BOM2]
FileRead,f,*P65001 %file%
FileGetSize,size,%file%
return StrLen(f)=size?"ANSI":"UTF-8 no BOM"
}
版本2【不完善】:
读取文本文件函数("C:\Users\Dianbo\Desktop\你的文本.txt", 文件行数, 文件编码)
MsgBox % 文件行数 ", " 文件编码
读取文本文件函数(文件路径, ByRef 文件行数:=0, ByRef 文件编码:="") {
if FileExist(文件路径) {
FileRead, text, *c %文件路径%
if (0xBFBBEF=NumGet(&text,"UInt") & 0xFFFFFF)
文件编码:= "UTF-8 BOM"
else if (0xFFFE=NumGet(&text,"UShort") )
文件编码:= "UTF-16BE BOM"
else if (0xFEFF=NumGet(&text,"UShort") )
文件编码:= "UTF-16LE BOM"
FileRead, 文件内容, %文件路径%
} else
文件内容 := 文件路径
; 文件内容:= "`r`n" . 文件内容 . "`r`n"
StringReplace, 文件内容, 文件内容, `n, `n, UseErrorLevel
文件行数 := ErrorLevel + 1
Return 文件内容
}
声明:站内资源为整理优化好的代码上传分享与学习研究,如果是开源代码基本都会标明出处,方便大家扩展学习路径。请不要恶意搬运,破坏站长辛苦整理维护的劳动成果。本站为爱好者分享站点,所有内容不作为商业行为。如若本站上传内容侵犯了原著者的合法权益,请联系我们进行删除下架。

评论(0)