找回密码
 加入
搜索
查看: 5825|回复: 10

[AU3基础] FileOpen($path,2)写文件如何保持原有编码格式【已解决】

  [复制链接]
发表于 2011-11-6 21:09:24 | 显示全部楼层 |阅读模式
本帖最后由 zcool321 于 2011-11-11 09:56 编辑

我发现在已存在的文件进行写入后,原有的文件格式会发生改变。这个问题怎么解决。
我写入用的FileOpen($Path,2),原有文件是UTF-8保存后是ANSI

还有一个问题 为什么FileOpen($Path,128 + 8) 创建的文件 看到的编码格式是UTF-8+ 而不是UTF-8~这两个有什么区别。我如何做到创建的文件编码格式是UTF-8

问题:
1、FileOpen($Path,2)保存后文件是ANSI,我想保留原有文件格式,该怎么办?
2、FileOpen($Path,128 + 8) 创建的文件是UTF-8+,但是我想要的是UTF-8,改怎么办?

感谢xms77问题2已经通过升级autoit3版本解决。
 楼主| 发表于 2011-11-6 23:53:28 | 显示全部楼层
本帖最后由 zcool321 于 2011-11-8 09:50 编辑

第二个问题我查了一下资料  发现UTF-8+ 和 UTF-8是有区别的
带+的说明带BOM,简单理解:BOM是为了识别UTF-8格式更方便,并且占用了文档三个字节。
具体UTF-8+ 和 UTF-8区别和作用,见点击这里
但是这样的改动可能会影响到个别程序的使用,所以我想用autoit创建一个UTF-8格式的文档改怎么做?
 楼主| 发表于 2011-11-7 10:44:57 | 显示全部楼层
自己顶-----------------------等待
发表于 2011-11-7 12:33:49 | 显示全部楼层
本帖最后由 xms77 于 2011-11-7 12:35 编辑

楼主好像应该用:fileopen($path, 1+256) 或者 fileopen($path, 2+256)
--------------------------------------------------------------------------------
FileOpen

打开指定的文件以供读写.


FileOpen ( "文件名" [, 模式 ] )




参数

文件名  要打开的文件名.
模式 [可选参数] 指定以何种模式(读或写)打开文件:
可以是下列几种:
  0 = 只读模式(默认)
  1 = 写入模式(附加数据到文件尾部)
  2 = 写入模式(先删除之前的内容)
  8 = 如果目标目录不存在就创建(参考注意).
  16 = 强制使用二进制(字节)模式(参考注意)
  32 = 使用 Unicode UTF16 小编码读写模式,读取不会覆盖存在的BOM.
  64 = 使用 Unicode UTF16 大编码读写模式,读取不会覆盖存在的BOM.
  128 = 使用 Unicode UTF8 (带BOM)读写模式,读取不会覆盖存在的BOM.
  256 = 使用 Unicode UTF8 (无BOM)读写模式.
  16384 = 当打开一个文件读取时(文件没有BOM), 使用完整文件 UTF8 检测. 如果没有使用这一模式,则只会检测文件最前端的 UTF8 标志.
文件夹路径必须存在(如果没有指定模式 '8' - 见注释).
 楼主| 发表于 2011-11-7 14:49:28 | 显示全部楼层
回复 4# xms77
我的帮主文档只到128。 256和16384都没有,而且我测试了一下 改成256创建的还是ansi格式。
问下你的autoit版本是多少,能帮我测试一下 256+8生成的编码格式么?
我的是3.3.2.0好像不支持openfile 256
发表于 2011-11-7 21:25:19 | 显示全部楼层
回复 5# zcool321
3.3.7.15版,你发给我我试试!
发表于 2011-11-7 21:27:29 | 显示全部楼层
回复 5# zcool321
换成最新的版本试试吧!
 楼主| 发表于 2011-11-8 01:02:03 | 显示全部楼层
回复 7# xms77
恩 明天试试~!  
第一个问题直到怎么解决么?
发表于 2011-11-8 09:46:55 | 显示全部楼层
Local $path=@DesktopDir & "\新建 文本文档.txt"
Local $Code[5]=[-1,0,32,64,128]

Local $encoding = FileGetEncoding($path)
If $encoding=-1 Then
    MsgBox(4096, "错误", "不能获取文件编码.")
    Exit
Else
    MsgBox(4096, "", "文件编码为:" & $encoding)
        $hfile=FileOpen($path,16+1);16进制打开,追加
        $str=FileRead($hfile)
        
        For $i=0 To UBound($Code)-1;根据文件编码定义字符串标志
                If $encoding=$Code[$i] Then
                        $encoding=$i
                        ExitLoop
                EndIf
        Next
        
        $str&=StringToBinary(@CRLF&"测试文件编码",$encoding)
        FileWrite($hfile,$str)
        FileClose($hfile)
EndIf
 楼主| 发表于 2011-11-8 18:01:57 | 显示全部楼层
回复 9# 3mile
非常感谢3mile~没有看到FileGetEncoding这个函数可以获取文件编码。
再问一下,我根据获取的文件编码 直接用fileOpen相应的模式打开就行了吧?
写入的字符串一定要用StringToBinary转换么?
发表于 2011-11-13 11:45:54 | 显示全部楼层
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-5-19 05:45 , Processed in 0.080691 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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