Creat0R
да нет, нашел ошибку
Цитата:
А обратно можно перекодировать? »
|
получилось вот что (включая исправленный вариант):
Код:

MsgBox (0,"_StringToJava()", '"Привет Мир!" ->'& @CRLF &'"'& _StringToJava("Привет Мир!") &'"')
MsgBox (0,"_JavaToString()", '"\u041f\u0440\u0438\u0432\u0435\u0442 \u041c\u0438\u0440!"'& @CRLF &'-> "'& _
_JavaToString("\u041f\u0440\u0438\u0432\u0435\u0442 \u041c\u0438\u0440!") &'"')
Func _StringToJava($sText)
Local $il = StringLen($sText)
Local $tw = DllStructCreate("wchar["& $il+1 &"]"), $sOut=""
Local $ts = DllStructCreate("ushort["&$il+1 &"]", DllStructGetPtr($tw))
DllStructSetData($tw, 1, $sText)
For $i=1 To StringLen($sText)
If DllStructGetData($ts,1,$i)<128 Then
$sOut &= DllStructGetData($tw,1,$i)
Else
$sOut &= "\u"& Hex(DllStructGetData($ts,1,$i),4)
EndIf
Next
Return $sOut
EndFunc
Func _JavaToString($sText)
Local $sOut="", $aText=StringRegExp($sText,"(?:\\u([[:xdigit:]]{4})|[[:ascii:]])",3)
For $i=0 To UBound($aText)-1
If StringLen($aText[$i])=1 Then
$sOut &= $aText[$i]
Else
$sOut &= ChrW(Dec($aText[$i]))
EndIf
Next
Return $sOut
EndFunc
ADD: Возник вопрос с управляющими символами: я тут поиграл Yudit и не совсем понял как должно быть в формате Java, редактор часть ASCII-символов преобразует в Unicode, часть нет... и как быть с символом "\"?.. в Java вроде обозначается "\\" но редактор оставляет одиночным, или нужно учитывать только комбинацию "\u"?.. но тогда как она должна представляться если это обычный текст?... или не заморачиваться и преобразовывать в Unicode все подряд включая ASCII?