Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


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?

Последний раз редактировалось amel27, 24-04-2008 в 04:46.

Это сообщение посчитали полезным следующие участники:

Отправлено: 02:03, 24-04-2008 | #455