$str = FileRead('wrar40b4ru_config.txt')
$file = FileOpen('wrar40b4ru_config_1251.txt', 2)
FileWrite($file, $str)
FileClose($file)
$str = FileRead('wrar40b4_config.txt')
$str = BinaryToString(StringToBinary($str, 2))
$file = FileOpen('wrar40b4_config_1251.txt', 2)
FileWrite($file, $str)
FileClose($file)
Как различить файлы для принятия решения о способе их обработки
UTF8 0xEFBBBF
UTF16 Little Endian 0xFFFE
UTF16 Big Endian 0xFEFF
Беда в том, что оба файла имеют одинаковые BOM - 0xFFFE и по этому параметру различить их не удается. :(читать BOM (первые 2-3 байта файла):
оба файла имеют одинаковые BOM - 0xFFFE
У меня не определяет! В обоих случаях пишет 2 :(Все равно функция _Encoding_GetFileEncoding из UDF Encoding правильно определяет один файл как ANSI, а другой, как UTF-16.
#include <Encoding.au3>
$Type1=_Encoding_GetFileEncoding("wrar40b4_config.txt")
$Type2=_Encoding_GetFileEncoding("wrar40b4ru_config.txt")
$preskey = MsgBox(1+256, "Test", _
"$Type1 = " & $Type1 & @CRLF & _
"$Type2 = " & $Type2 & @CRLF & _
@CRLF)
If $preskey = 2 Then Exit
У меня не определяет!
Dim $aFiles[2] = ['wrar40b4_config.txt', 'wrar40b4ru_config.txt']
For $i = 0 To 1
$hFile = FileOpen(@ScriptDir & '\' & $aFiles[$i], 16)
$sText = FileRead($hFile, 10)
FileClose($hFile)
Switch StringInStr($sText, 57)
;57 - буква W
Case 11
$sString = FileRead(@ScriptDir & '\' & $aFiles[$i])
$sString = BinaryToString(StringToBinary($sString, 2))
$hFile = FileOpen(@ScriptDir & '\1251_' & $aFiles[$i], 2)
FileWrite($hFile, $sString)
FileClose($hFile)
Case 15
$sString = FileRead(@ScriptDir & '\' & $aFiles[$i])
$hFile = FileOpen(@ScriptDir & '\1251_' & $aFiles[$i], 2)
FileWrite($hFile, $sString)
FileClose($hFile)
EndSwitch
Next
_Encoding('wrar40b4ru_config')
_Encoding('wrar40b4_config')
exit
Func _Encoding($tf)
$file = FileOpen($tf & '.txt', 16)
$sRead = FileRead($file, 4)
FileClose($file)
$nByte12 = BinaryMid($sRead, 1, 2)
$nByte4 = BinaryMid($sRead, 4, 1)
$file = FileOpen($tf & '.txt', 0)
$str = FileRead($file)
FileClose($file)
If $nByte12 = '0xFFFE' Then
If $nByte4 <> '0x00' Then $str = BinaryToString(StringToBinary($str, 2))
$file = FileOpen($tf & '_1251.txt', 2)
FileWrite($file, $str)
FileClose($file)
EndIf
EndFunc ;==>_Encoding
А если так:Но остается проблема в последних четырех байтах (0D 00 0A 00)
;...
$sString = StringTrimRight(StringReplace($sString, @CRLF & Chr(26), ''), 4) & @CRLF
;...