版本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 文件内容
}

 

声明:站内资源为整理优化好的代码上传分享与学习研究,如果是开源代码基本都会标明出处,方便大家扩展学习路径。请不要恶意搬运,破坏站长辛苦整理维护的劳动成果。本站为爱好者分享站点,所有内容不作为商业行为。如若本站上传内容侵犯了原著者的合法权益,请联系我们进行删除下架。