本帖最后由 飘云 于 2010-10-1 21:39 编辑
我的目标是向一个文件内的目标偏移处写入中文字符串,编码要求是GBK,我使用的是_WinAPI_SetFilePointer来定位,但是使用_WinAPI_SetFilePointer的话,写入必须用_WinAPI_WriteFile了,在_WinAPI_WriteFile函数中必须要有一个包含要写入的数据的缓冲区的指针DllStructGetPtr($tBuffer),那么我就应该将要写入的中文数据放到Struct结构中,问题来了,使用DllStructCreate创建时,如果用wchar可以正常获取完整的一截中文字符串,但是此时保存在Struct结构中的中文编码是UNICODE,写入文件后的编码自然也是UNICODE了,这不是我需要的,而用char等其它类型却获取不了完整的中文字符串,貌似只能获取到完整编码的一半,我该如何是好呢?还有没有其它办法,求助求助
大概的编码是这样的,然后显示的话只能显示出“我你它”$sFile = @ScriptDir & '\test.txt'
$sText = "我你它非你"
$tBuffer = DllStructCreate("CHAR[" & BinaryLen(StringToBinary($sText)) & "]")
DllStructSetData($tBuffer, 1, $sText)
$hFile = _WinAPI_CreateFile($sFile, 1)
_WinAPI_WriteFile($hFile, DllStructGetPtr($tBuffer), BinaryLen(StringToBinary($sText)), $nBytes)
_WinAPI_CloseHandle($hFile)
之前也想过用replace的,但是数据在整个文件中并不是唯一的,使用替换会替换掉那些不要替换的数据,所以放弃了,据说替换可是设置起始位置,但是我不知道怎么设 |