找回密码
 加入
搜索
查看: 10080|回复: 18

[AU3基础] [已解决] 如何让 _ReplaceStringInFile 支持 UTF-8 编码文件?

  [复制链接]
发表于 2010-4-1 16:00:48 | 显示全部楼层 |阅读模式
本帖最后由 131738 于 2010-4-1 18:30 编辑

如何让 _ReplaceStringInFile 支持 UTF-8 编码文件?

又或如何批量自动修改 UTF-8 的 htm 文件为 GB2312 ?

有办法吗?。。。。谢谢!!!!!!

评分

参与人数 1金钱 +10 收起 理由
afan + 10 感谢主动将修改帖子分类为[已解决],请继续 ...

查看全部评分

发表于 2010-4-1 16:22:41 | 显示全部楼层
貌似现在就支持吧,传个文件测试下
 楼主| 发表于 2010-4-1 16:31:35 | 显示全部楼层
回复 2# afan

我已经测试了,替换后为乱码,我整理好后传给你,谢谢!!!!
 楼主| 发表于 2010-4-1 16:45:00 | 显示全部楼层
回复 2# afan

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2010-4-1 16:54:27 | 显示全部楼层
重写时它给保存为Ansi编码了,我再看看
 楼主| 发表于 2010-4-1 16:59:11 | 显示全部楼层
回复 5# afan


    谢谢!等你!
发表于 2010-4-1 17:08:33 | 显示全部楼层
本帖最后由 afan 于 2010-4-4 22:26 编辑

回复 6# 131738


    修改了 _ReplaceStringInFile 函数,重命名为 __ReplaceStringInFile ,可自动识别编码
;
Func __ReplaceStringInFile($szFileName, $szSearchString, $szReplaceString, $fCaseness = 0, $fOccurance = 1)
        Local $iRetVal = 0
        Local $nCount, $sEndsWith
        ; Check if file is readonly ..
        If StringInStr(FileGetAttrib($szFileName), "R") Then Return SetError(6, 0, -1)
        Local $hFile = FileOpen($szFileName, $FO_READ)
        If $hFile = -1 Then Return SetError(1, 0, -1)
        Local $s_TotFile = FileRead($hFile, FileGetSize($szFileName))
        If StringRight($s_TotFile, 2) = @CRLF Then
                $sEndsWith = @CRLF
        ElseIf StringRight($s_TotFile, 1) = @CR Then
                $sEndsWith = @CR
        ElseIf StringRight($s_TotFile, 1) = @LF Then
                $sEndsWith = @LF
        Else
                $sEndsWith = ""
        EndIf
        Local $aFileLines = StringSplit(StringStripCR($s_TotFile), @LF)
        FileClose($hFile)
        Local $mode = FileGetEncoding($szFileName)
        If $mode = -1 Then $mode = 0
        Local $hWriteHandle = FileOpen($szFileName, $FO_OVERWRITE + $mode)
        If $hWriteHandle = -1 Then Return SetError(2, 0, -1)
        For $nCount = 1 To $aFileLines[0]
                If StringInStr($aFileLines[$nCount], $szSearchString, $fCaseness) Then
                        $aFileLines[$nCount] = StringReplace($aFileLines[$nCount], $szSearchString, $szReplaceString, 1 - $fOccurance, $fCaseness)
                        $iRetVal = $iRetVal + 1
                        If $fOccurance = 0 Then
                                $iRetVal = 1
                                ExitLoop
                        EndIf
                EndIf
        Next
        For $nCount = 1 To $aFileLines[0] - 1
                If FileWriteLine($hWriteHandle, $aFileLines[$nCount]) = 0 Then
                        FileClose($hWriteHandle)
                        Return SetError(3, 0, -1)
                EndIf
        Next
        ; Write the last record and ensure it ends with the same as the input file
        If $aFileLines[$nCount] <> "" Then FileWrite($hWriteHandle, $aFileLines[$nCount] & $sEndsWith)
        FileClose($hWriteHandle)
        Return $iRetVal
EndFunc   ;==>_ReplaceStringInFile
;
 楼主| 发表于 2010-4-1 17:11:35 | 显示全部楼层
回复 7# afan

谢谢!!!我看看,有问题再麻烦你。。。。。
发表于 2010-4-1 17:19:14 | 显示全部楼层
回复 8# 131738


    刚刚举例时前面少了个_ 记得加上,不然就还是使用的原函数了~
 楼主| 发表于 2010-4-1 17:24:31 | 显示全部楼层
回复 9# afan
谢谢!!!全部OK了!!!

谢谢提醒,我以注意到了!
 楼主| 发表于 2010-4-1 17:26:01 | 显示全部楼层
回复 9# afan
谢谢!!!全部OK了!!!

谢谢提醒,我以注意到了!

是否应向萧管反应一下呢?。。。。。。
发表于 2010-4-1 17:28:11 | 显示全部楼层
回复 11# 131738


    反映下也好,由官网修改最好~

p.s,貌似你又在搞汉化了~ ^ ___ ^
 楼主| 发表于 2010-4-1 17:33:01 | 显示全部楼层
回复 12# afan

有句名言:闲着也是闲着,混点罢。。。。呵呵!!!!
发表于 2010-4-1 17:34:43 | 显示全部楼层
回复  afan

有句名言:闲着也是闲着,混点罢。。。。呵呵!!!!
131738 发表于 2010-4-1 17:33



    看来坛友们又有福啦
 楼主| 发表于 2010-4-1 17:38:32 | 显示全部楼层
回复 14# afan

千万别抱希望,2000 多文件,且是深层次的东西。。。。。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-11-21 23:22 , Processed in 0.084937 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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