kxing 发表于 2010-11-5 01:07:13

[已解决]修正下这个转码函数

本帖最后由 kxing 于 2010-11-5 09:33 编辑

转换后前面的“360”丢失了。
希望高手能把它完美下,多谢!
MsgBox(0,'',HexToStr("360\u53d1\u81f4\u7f51\u6c11\u7d27\u6025\u6c42\u52a9\u4fe1\uff1a\u547c\u5401\u7528\u6237\u505c\u7528QQ\u4e09\u5929"))

Func HexToStr($string)
Local $temp_str,$temp_s
$temp_s=StringSplit($string,'\u',3)

$string=''
For $n=0 To UBound($temp_s)-1
If StringLen($temp_s[$n])<>4 Then
$temp_s[$n]=ChrW('0x'&StringMid($temp_s[$n],1,4))&StringMid($temp_s[$n],5)
$string&=$temp_s[$n]
Else
$temp_s[$n]=ChrW('0x'&$temp_s[$n])
$string&=$temp_s[$n]
EndIf
Next
Return $string
EndFunc

kxing 发表于 2010-11-5 01:12:43

不知道这样修改是否正确:

MsgBox(0,'',HexToStr("360\u53d1\u81f4\u7f51\u6c11\u7d27\u6025\u6c42\u52a9\u4fe1\uff1a\u547c\u5401\u7528\u6237\u505c\u7528QQ\u4e09\u5929"))

Func HexToStr($string)
Local $temp_str,$temp_s
$temp_s=StringSplit($string,'\u',3)

$string=''
For $n=0 To UBound($temp_s)-1
If StringLen($temp_s[$n])>4 Then
$temp_s[$n]=ChrW('0x'&StringMid($temp_s[$n],1,4))&StringMid($temp_s[$n],5)
$string&=$temp_s[$n]
ElseIf StringLen($temp_s[$n])==4 Then
$temp_s[$n]=ChrW('0x'&$temp_s[$n])
$string&=$temp_s[$n]
Else
$string&=$temp_s[$n]
EndIf
Next
Return $string
EndFunc

3mile 发表于 2010-11-5 09:20:38

哦,有BUG吗?
改了一下
#include <array.au3>
#include <string.au3>
#include <INet.au3>

$s_URL='http://top.news.sina.com.cn/ws/GetTopDataList.php?top_type=day&top_cat=www_all&top_time=20101104&top_show_num=100&top_order=ASC&js_var=all_1_data'
$soure=_INetGetSource ( $s_URL )
FileWrite('url.txt',$soure)
;$soure=FileRead('soure.txt')
$s_array=StringRegExp($soure,'{(.*?)}',3)
Local $temp_str,$temp,$temp_s,$string
Local $array
For $i=1 To UBound($s_array)-1   
    $temp_str=''
    $array[$i]=$s_array[$i]
    $temp=StringRegExp($s_array[$i],'"(.*?)"',3)
    $array[$i]=hextostring($temp)
    $array[$i]=hextostring($temp)
    $array[$i]=url($temp)
    $array[$i]=url($temp)
Next
_ArrayDisplay($array)

Func Hextostring($string)
    Local $temp_str,$temp_s
    $temp_s=StringSplit($string,'\u',3)
    ;_ArrayDisplay($temp_s)
    $string=''
    For $n=0 To UBound($temp_s)-1
      If StringLen($temp_s[$n])>4 Then
            $temp_s[$n]=ChrW('0x'&StringMid($temp_s[$n],1,4))&StringMid($temp_s[$n],5)
            $string&=$temp_s[$n]
      ElseIf StringLen($temp_s[$n])<4 Then
            $string&=$temp_s[$n]
      Else
      $temp_s[$n]=ChrW('0x'&$temp_s[$n])
      $string&=$temp_s[$n]
      EndIf
    Next
    Return $string
EndFunc

Func url(ByRef $string)
    Local $url
    $string=StringReplace($string,'\/','/')
    Return $string
EndFunc

kxing 发表于 2010-11-5 09:33:21

恩,就是低于四个字符就不处理了.

menfan1 发表于 2010-11-6 11:59:16

呵呵学习一下。。
页: [1]
查看完整版本: [已解决]修正下这个转码函数