firewzy 发表于 2008-5-21 23:15:52

在unicode编译脚本情况下的一个难题

在AUTOIT脚本编程中,可以使用“#AutoIt3Wrapper_UseAnsi=y”对脚本进行ANSI模式编译,这样在使用STRINGLEN,STRINGLEFT,STRINGMID,STRINGRIGHT,STRINGFORMAT等字符串操作函数时都会将一个汉字看作两个字符;但是现在由于需要对AUTOIT脚本按照UNICODE的模式进行编译,这样导致在使用上述字符串操作函数时都将一个汉字看作一个字符。我的问题是,如何在UNICODE编译的情况下使用字符串操作函数时会将一个汉字看作两个字符呢?


#AutoIt3Wrapper_UseAnsi=y
msgbox(0, "test", stringlen("中国人")) ;output 6



#AutoIt3Wrapper_UseAnsi=n
msgbox(0, "test", stringlen("中国人")) ;output 3


[ 本帖最后由 firewzy 于 2008-5-23 00:55 编辑 ]

firewzy 发表于 2008-5-23 00:55:13

已解决

#AutoIt3Wrapper_UseAnsi=n

$Str_Field = "嘿嘿haha"
$Int_FieldLength = StringLen($Str_Field)
$Int_FieldCnCharCount = 0

For $Int_FieldStrIndex = 1 To $Int_FieldLength

        If Not StringIsASCII(StringMid($Str_Field, $Int_FieldStrIndex, 1)) Then
                $Int_FieldCnCharCount+= 2
        Else
                $Int_FieldCnCharCount += 1
        EndIf

Next

Msgbox(0, "test", $Int_FieldCnCharCount); output 8


得到的$Int_FieldCnCharCount就是中英文混合字符串的ANSI长度。
页: [1]
查看完整版本: 在unicode编译脚本情况下的一个难题