zcool321 发表于 2011-11-6 21:09:24

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

本帖最后由 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版本解决。

zcool321 发表于 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格式的文档改怎么做?

zcool321 发表于 2011-11-7 10:44:57

自己顶-----------------------等待

xms77 发表于 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' - 见注释).

zcool321 发表于 2011-11-7 14:49:28

回复 4# xms77
我的帮主文档只到128。 256和16384都没有,而且我测试了一下 改成256创建的还是ansi格式。
问下你的autoit版本是多少,能帮我测试一下 256+8生成的编码格式么?
我的是3.3.2.0好像不支持openfile 256

xms77 发表于 2011-11-7 21:25:19

回复 5# zcool321
3.3.7.15版,你发给我我试试!

xms77 发表于 2011-11-7 21:27:29

回复 5# zcool321
换成最新的版本试试吧!

zcool321 发表于 2011-11-8 01:02:03

回复 7# xms77
恩 明天试试~!
第一个问题直到怎么解决么?

3mile 发表于 2011-11-8 09:46:55

Local $path=@DesktopDir & "\新建 文本文档.txt"
Local $Code=[-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

zcool321 发表于 2011-11-8 18:01:57

回复 9# 3mile
非常感谢3mile~没有看到FileGetEncoding这个函数可以获取文件编码。
再问一下,我根据获取的文件编码 直接用fileOpen相应的模式打开就行了吧?
写入的字符串一定要用StringToBinary转换么?

江甫杞令 发表于 2011-11-13 11:45:54

打酱油的,混点分数提高下等级,谁然我是路过,但是也不是水帖子
Dragon Nest Gold,vindictus gold,swg credits,silkroad gold,NosTale Gold,Knight Noah,Eden Eternal gold, Elsword ED,tibia gold,shaiya gold,rs2 gold,rohan gold,RIFT Platinum,RIFT Plat,RIFT Gold,rappelz gold,rappelz rupees,perfect world gold,pw gold,Metin2 Yang,Metin2 Gold,maplestory mesos,mabinogi gold,lineage 2 adena,guild wars gold,ffxiv gil,ffxi gil,2moons dil, 4story money, 4story Luna, 4Story Gold, 9Dragons gold, Aion Kinah, Buy Aion Kinah, Buy Aion Gold, apb gold, Cabal Alz, Cabal Gold, dfo gold, dofus kamas, EVE ISK, eq2 plat,
页: [1]
查看完整版本: FileOpen($path,2)写文件如何保持原有编码格式【已解决】