131738 发表于 2010-4-1 16:00:48

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

本帖最后由 131738 于 2010-4-1 18:30 编辑

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

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

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

afan 发表于 2010-4-1 16:22:41

貌似现在就支持吧,传个文件测试下

131738 发表于 2010-4-1 16:31:35

回复 2# afan

我已经测试了,替换后为乱码,我整理好后传给你,谢谢!!!!

131738 发表于 2010-4-1 16:45:00

回复 2# afan

afan 发表于 2010-4-1 16:54:27

重写时它给保存为Ansi编码了,我再看看

131738 发表于 2010-4-1 16:59:11

回复 5# afan


    谢谢!等你!

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
                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 - 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;

131738 发表于 2010-4-1 17:11:35

回复 7# afan

谢谢!!!我看看,有问题再麻烦你。。。。。

afan 发表于 2010-4-1 17:19:14

回复 8# 131738


    刚刚举例时前面少了个_ 记得加上,不然就还是使用的原函数了~

131738 发表于 2010-4-1 17:24:31

回复 9# afan
谢谢!!!全部OK了!!!

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

131738 发表于 2010-4-1 17:26:01

回复 9# afan
谢谢!!!全部OK了!!!

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

是否应向萧管反应一下呢?。。。。。。

afan 发表于 2010-4-1 17:28:11

回复 11# 131738


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

p.s,貌似你又在搞汉化了~ ^ ___ ^

131738 发表于 2010-4-1 17:33:01

回复 12# afan

有句名言:闲着也是闲着,混点罢。。。。呵呵!!!!:face (33):

afan 发表于 2010-4-1 17:34:43

回复afan

有句名言:闲着也是闲着,混点罢。。。。呵呵!!!!
131738 发表于 2010-4-1 17:33 http://www.autoitx.com/images/common/back.gif


    看来坛友们又有福啦 :face (23):

131738 发表于 2010-4-1 17:38:32

回复 14# afan

千万别抱希望,2000 多文件,且是深层次的东西。。。。。
页: [1] 2
查看完整版本: [已解决] 如何让 _ReplaceStringInFile 支持 UTF-8 编码文件?