То, что у вас есть, - это двоичные данные, которые были преобразованы в формат, читаемый человеком.
Итак, вам нужно сначала проанализировать строку, преобразовав ее символы в байты.
Подстроки, которые закодированыв формате escape-последовательности (перед которым стоит символ '\'
, за которым следуют 1-4 символа) декодируются в определенные байты, подобные этому:
\b
-> 0x08
\t
-> 0x09
\n
-> 0x0A
\f
-> 0x0C
\r
-> 0x0D
\"
-> 0x22
\'
-> 0x27
\\
-> 0x5C
\u00##
+ \uff##
-> 0x##
(ff
из-за расширения знака для байтов> = 0x80)
Любые неэкранированные символы в строке должны быть преобразованы как-is (т. е. просто приведение с 16-битного Char
к 8-битному Byte
игнорирования старших 8 бит).
Давайте посмотрим на первую предоставленную вами строку:
\ п \ bbcn_test \ u0012 \ u00041.14 \ u001a \ u0004escc \ "\ u0004vscc * (\ u0012 \ е \ u0012 \ п \b \ u0012 \ u002 \ u0012 \ u0001 \ u001a \ u000b \ t \ n \ u0007Org1MSP \ u001a \ u000b \ u0012 \ t \ n \ u0007Org2MSP2D \ n \ ufffdufffd \ ufffd \ ufffd3RU4 \ ufffd \ ufffdR \ ufffd \ ufffd \ ufffd \ ufffd @ \ ufffd \ ufffds \ b \ ufffd \ u0014 \ ufffd \ ufffd. \ ufffd \ ufff ufffufffd @ \ ufffd \ ufffd \ ufffdƳ \ ufffdi \ ufffd $ \ ufffd \ ufffd4 \ ufffdgP \ ufffd: \ ufffdt \ u000e: 6ђ ufffd \ ufffd3 \ u007fJ \ ufffd \ uff {uff} ufffdufffd \ u001d \ ufffd \ ufffd \ ufffd \ ufffd \ ufffd3 \ ufffdb? @ \ ufffdB, \ u0012 \ е \ u0012 \ п \ б \ u0001 \ u0012 \ u0002 \ Ь \ u0000 \ u0012 \ u0002 \ б \ u0001 \ u001a\ r0000 \ u000b \ n \ u0007Org1MSP \ u0010 \ u001a \ r \ u0012 \ u \ n0007Org2MSP \ u0010
Разбить отдельные последовательности для декодирования:
\n
\b
b
c
n
_
t
e
s
t
\u0012
\u0004
1
.
1
4
\u001a
\u0004
e
s
c
c
\"
\u0004
v
s
c
c
*
(
\u0012
\f
\u0012
\n
\b
\u0001
\u0012
\u0002
\b
\u0000
\u0012
\u0002
\b
\u0001
\u001a
\u000b
\u0012
\t
\n
\u0007
O
r
g
1
M
S
P
\u001a
\u000b
\u0012
\t
\n
\u0007
O
r
g
2
M
S
P
2
D
\n
\ufffd
\ufffd
a
\ufffd
\ufffd
\ufffd
3
R
U
4
\ufffd
\ufffd
R
\ufffd
\ufffd
\ufffd
\ufffd
@
\ufffd
\ufffd
s
\b
\ufffd
\u0014
\ufffd
\ufffd
.
\ufffd
!
\ufffd
\u0012
s
\ufffd
\ufffd
c
\ufffd
6
\ufffd
\ufffd
@
\ufffd
\u001e
F
\ufffd
Ƴ
\ufffd
i
\ufffd
$
\ufffd
\ufffd
4
\ufffd
g
P
\ufffd
:
\ufffd
t
\u000e
:
6
ђ
1 \ufffd
\ufffd
3
\u007f
J
\ufffd
H
t
\u0004
\ufffd
\ufffd
\ufffd
\ufffd
^
{
\\
\ufffd
\u001d
\ufffd
\ufffd
\ufffd
\ufffd
\ufffd
3
\ufffd
b
?
@
\ufffd
B
,
\u0012
\f
\u0012
\n
\b
\u0001
\u0012
\u0002
\b
\u0000
\u0012
\u0002
\b
\u0001
\u001a
\r
\u0012
\u000b
\n
\u0007
O
r
g
1
M
S
P
\u0010
\u0001
\u001a
\r
\u0012
\u000b
\n
\u0007
O
r
g
2
M
S
P
\u0010
\u0001
И преобразовать их в байты:
0x0A
0x08
0x62
0x63
0x6E
0x5F
0x74
0x65
0x73
0x74
0x12
0x04
0x31
0x2E
0x31
0x34
0x1A
0x04
0x65
0x73
0x63
0x63
0x22
0x04
0x76
0x73
0x63
0x63
0x2A
0x28
0x12
0x0C
0x12
0x0A
0x08
0x01
0x12
0x02
0x08
0x00
0x12
0x02
0x08
0x01
0x1A
0x0B
0x12
0x09
0x0A
0x07
0x4F
0x72
0x67
0x31
0x4D
0x53
0x50
0x1A
0x0B
0x12
0x09
0x0A
0x07
0x4F
0x72
0x67
0x32
0x4D
0x53
0x50
0x32
0x44
0x0A
0x20
0xFD
0xFD
0x61
0xFD
0xFD
0xFD
0x33
0x52
0x55
0x34
0xFD
0xFD
0x52
0xFD
0xFD
0xFD
0xFD
0x40
0xFD
0xFD
0x73
0x08
0xFD
0x14
0xFD
0xFD
0x2E
0xFD
0x21
0xFD
0x12
0x20
0x73
0xFD
0xFD
0x63
0xFD
0x36
0xFD
0xFD
0x40
0xFD
0x1E
0x46
0xFD
0x59
0xFD
0x69
0xFD
0x24
0xFD
0xFD
0x34
0xFD
0x67
0x50
0xFD
0x3A
0xFD
0x74
0x0E
0x3A
0x20
0x36
ђ
1 0xFD
0xFD
0x33
0x7F
0x4A
0xFD
0x48
0x74
0x04
0xFD
0xFD
0xFD
0xFD
0x5E
0x7B
0x5C
0xFD
0x1D
0xFD
0xFD
0xFD
0xFD
0xFD
0x33
0xFD
0x62
0x3F
0x40
0xFD
0x42
0x2C
0x12
0x0C
0x12
0x0A
0x08
0x01
0x12
0x02
0x08
0x00
0x12
0x02
0x08
0x01
0x1A
0x0D
0x12
0x0b
0x0A
0x07
0x4F
0x72
0x67
0x31
0x4D
0x53
0x50
0x10
0x01
0x1A
0x0D
0x12
0x0B
0x0A
0x07
0x4F
0x72
0x67
0x32
0x4D
0x53
0x50
0x10
0x01
После того, как вы декодировали байты, вы можете интерпретировать двоичные данные по мере необходимости. Это кажется в некотором формате Type-Length-Value, как @RobNapier, предложенный в комментарии к вашему вопросу:
BTW, это похоже на TLV (Тип-длина-значение). Первый байт - это тип 0x0a, за которым следует длина 0x08, за которой следуют восемь байтов данных ("bcn_test"), за которыми следует тип (0x12), за которым следует длина (0x04), за которой следуют 4 байта данных ("1,14 ") и т. Д.
0x0A
(тип 10), 0x08
(лен 8)
0x62
0x63
0x6E
0x5F
0x74
0x65
0x73
0x74
(bcn_test
)
0x12
(тип 18) 0x04
(Len 4)
0x31
0x2E
0x31
0x34
(1.14
)
0x1A
(тип 26) 0x04
(Len 4)
0x65
0x73
0x63
0x63
(escc
)
0x22
(Тип 34) 0x04
(Лен 4)
0x76
0x73
0x63
0x63
(vscc
)
и т. Д ...
1: однако я не уверен, как правильно декодировать ђ
в исходной строке. Это кодовая точка Unicode U+0452 CYRILLIC SMALL LETTER DJE
, которая в Java Char
является байтами 0x04 0x52
. Усеченный до 0x04
или 0x52
или интерпретированный в кириллической кодировке, такой как Windows-1251, где это будет байт 0x90
, он не совпадает с остальным форматом TLV.