从乱码短信谈短信解码
某项目接收到乱码短信:
Ω f T K p ! C ù
从底层读出其内容数据为:0x15,0x33,0x75,0x0d,到第80个byte数据都是0x0d,最后一个byte是0x07。
由此为例,分析7bit解码过程:
方法1:
Hex
|
0x15
|
0x33
|
0x75
|
0x0d
|
Dec
|
0001 0101
|
00110011
|
01110101
|
00001101
|
截取
|
0001 0101
|
00110011
|
01110101
|
00001101
|
补位
|
001 0101
|
110011 0
|
10101 00
|
1101 011
|
查表
|
Ω
|
f
|
T
|
K
|
方法2:
Hex
|
0x15
|
0x33
|
0x75
|
0x0d
|
倒排
|
0x0d
|
0x75
|
0x33
|
0x15
|
Dec
|
00001101
|
01110101
|
00110011
|
0001 0101
|
截取
|
0000 1101
|
011 10101
|
00 110011
|
0 001 0101
|
补位
|
1101 011
|
10101 00
|
110011 0
|
0010101
|
查表
|
K
|
T
|
f
|
Ω
|
倒排
|
Ω
|
f
|
T
|
K
|
附编码(选自7bit_default_table pud格式7bit编码对应表):
注意事项:空位使用0填充(图中6字节的情况),当编码后最后一个字节空位刚好为7位时(图中7字节的情况),改为使用字符CR(0x0d)填充, 避免填充后多余字节0x00与c语言字符串结尾符号0x00的冲突
编码过程示例
附7bit default table:
Character
|
GSM 7-bit default alphabet
(Decimal)
|
GSM 7-bit default alphabet
(Hexadecimal)
|
ISO 8859 Latin 1
(Decimal)
|
ISO 8859 Latin 1
(Hexadecimal)
|
@
|
At sign
|
0
|
00
|
64
|
40
|
£
|
Pound sign
|
1
|
01
|
163
|
A3
|
$
|
Dollar sign
|
2
|
02
|
36
|
24
|
¥
|
Yuan/Yen sign
|
3
|
03
|
165
|
A5
|
è
|
Small letter e with grave accent
|
4
|
04
|
232
|
E8
|
é
|
Small letter e with acute accent
|
5
|
05
|
233
|
E9
|
ù
|
Small letter u with grave accent
|
6
|
06
|
249
|
F9
|
ì
|
Small letter i with grave accent
|
7
|
07
|
236
|
EC
|
ò
|
Small letter o with grave accent
|
8
|
08
|
242
|
F2
|
Ç
|
Capital letter C with cedilla
|
9
|
09
|
199
|
C7
|
|
Linefeed
|
10
|
0A
|
10
|
0A
|
Ø
|
Capital letter O with stroke
|
11
|
0B
|
216
|
D8
|
ø
|
Small letter o with stroke
|
12
|
0C
|
248
|
F8
|
|
Carriage return
|
13
|
0D
|
13
|
0D
|
Å
|
Capital letter A with ring
|
14
|
0E
|
197
|
C5
|
å
|
Small letter a with ring
|
15
|
0F
|
229
|
E5
|
Δ
|
Capital letter Greek delta
|
16
|
10
|
|
|
_
|
Underscore
|
17
|
11
|
95
|
5F
|
Φ
|
Capital letter Greek phi
|
18
|
12
|
|
|
Γ
|
Capital letter Greek gamma
|
19
|
13
|
|
|
Λ
|
Capital letter Greek lambda
|
20
|
14
|
|
|
Ω
|
Capital letter Greek omega
|
21
|
15
|
|
|
Π
|
Capital letter Greek pi
|
22
|
16
|
|
|
Ψ
|
Capital letter Greek psi
|
23
|
17
|
|
|
Σ
|
Capital letter Greek sigma
|
24
|
18
|
|
|
Θ
|
Capital letter Greek theta
|
25
|
19
|
|
|
Ξ
|
Capital letter Greek xi
|
26
|
1A
|
|
|
|
Escape
|
27
|
1B
|
|
|
|
Form feed
|
27 10
|
1B0A
|
12
|
0C
|
^
|
Caret / Circumflex
|
27 20
|
1B14
|
94
|
5E
|
{
|
Left curly bracket
|
27 40
|
1B28
|
123
|
7B
|
}
|
Right curly bracket
|
27 41
|
1B29
|
125
|
7D
|
\
|
Backslash
|
27 47
|
1B2F
|
92
|
5C
|
[
|
Left square bracket
|
27 60
|
1B3C
|
91
|
5B
|
~
|
Tilde
|
27 61
|
1B3D
|
126
|
7E
|
]
|
Right square bracket
|
27 62
|
1B3E
|
93
|
5D
|
|
|
Vertical bar
|
27 64
|
1B40
|
124
|
7C
|
€
|
Euro sign
|
27 101
|
1B65
|
|
|
Æ
|
Capital letter AE
|
28
|
1C
|
198
|
C6
|
æ
|
Small letter ae
|
29
|
1D
|
230
|
E6
|
ß
|
Small letter German Eszett
|
30
|
1E
|
223
|
DF
|
É
|
Capital letter E with acute accent
|
31
|
1F
|
201
|
C9
|
|
Space
|
32
|
20
|
32
|
20
|
!
|
Exclamation mark
|
33
|
21
|
33
|
21
|
"
|
Quotation mark
|
34
|
22
|
34
|
22
|
#
|
Number sign
|
35
|
23
|
35
|
23
|
¤
|
Currency sign
|
36
|
24
|
164
|
A4
|
%
|
Percent sign
|
37
|
25
|
37
|
25
|
&
|
Ampersand
|
38
|
26
|
38
|
26
|
'
|
Apostrophe
|
39
|
27
|
39
|
27
|
(
|
Left parenthesis
|
40
|
28
|
40
|
28
|
)
|
Right parenthesis
|
41
|
29
|
41
|
29
|
*
|
Asterisk
|
42
|
2A
|
42
|
2A
|
+
|
Plus sign
|
43
|
2B
|
43
|
2B
|
,
|
Comma
|
44
|
2C
|
44
|
2C
|
-
|
Minus sign / Hyphen
|
45
|
2D
|
45
|
2D
|
.
|
Full stop / Period
|
46
|
2E
|
46
|
2E
|
/
|
Slash
|
47
|
2F
|
47
|
2F
|
0
|
Digit zero
|
48
|
30
|
48
|
30
|
1
|
Digit one
|
49
|
31
|
49
|
31
|
2
|
Digit two
|
50
|
32
|
50
|
32
|
3
|
Digit three
|
51
|
33
|
51
|
33
|
4
|
Digit four
|
52
|
34
|
52
|
34
|
5
|
Digit five
|
53
|
35
|
53
|
35
|
6
|
Digit six
|
54
|
36
|
54
|
36
|
7
|
Digit seven
|
55
|
37
|
55
|
37
|
8
|
Digit eight
|
56
|
38
|
56
|
38
|
9
|
Digit nine
|
57
|
39
|
57
|
39
|
:
|
Colon
|
58
|
3A
|
58
|
3A
|
;
|
Semicolon
|
59
|
3B
|
59
|
3B
|
<
|
Less-than sign
|
60
|
3C
|
60
|
3C
|
=
|
Equals sign
|
61
|
3D
|
61
|
3D
|
>
|
Greater-than sign
|
62
|
3E
|
62
|
3E
|
?
|
Question mark
|
63
|
3F
|
63
|
3F
|
¡
|
Inverted exclamation mark
|
64
|
40
|
161
|
A1
|
A
|
Capital letter A
|
65
|
41
|
65
|
41
|
B
|
Capital letter B
|
66
|
42
|
66
|
42
|
C
|
Capital letter C
|
67
|
43
|
67
|
43
|
D
|
Capital letter D
|
68
|
44
|
68
|
44
|
E
|
Capital letter E
|
69
|
45
|
69
|
45
|
F
|
Capital letter F
|
70
|
46
|
70
|
46
|
G
|
Capital letter G
|
71
|
47
|
71
|
47
|
H
|
Capital letter H
|
72
|
48
|
72
|
48
|
I
|
Capital letter I
|
73
|
49
|
73
|
49
|
J
|
Capital letter J
|
74
|
4A
|
74
|
4A
|
K
|
Capital letter K
|
75
|
4B
|
75
|
4B
|
L
|
Capital letter L
|
76
|
4C
|
76
|
4C
|
M
|
Capital letter M
|
77
|
4D
|
77
|
4D
|
N
|
Capital letter N
|
78
|
4E
|
78
|
4E
|
O
|
Capital letter O
|
79
|
4F
|
79
|
4F
|
P
|
Capital letter P
|
80
|
50
|
80
|
50
|
Q
|
Capital letter Q
|
81
|
51
|
81
|
51
|
R
|
Capital letter R
|
82
|
52
|
82
|
52
|
S
|
Capital letter S
|
83
|
53
|
83
|
53
|
T
|
Capital letter T
|
84
|
54
|
84
|
54
|
U
|
Capital letter U
|
85
|
55
|
85
|
55
|
V
|
Capital letter V
|
86
|
56
|
86
|
56
|
W
|
Capital letter W
|
87
|
57
|
87
|
57
|
X
|
Capital letter X
|
88
|
58
|
88
|
58
|
Y
|
Capital letter Y
|
89
|
59
|
89
|
59
|
Z
|
Capital letter Z
|
90
|
5A
|
90
|
5A
|
Ä
|
Capital letter A with diaeresis
|
91
|
5B
|
196
|
C4
|
Ö
|
Capital letter O with diaeresis
|
92
|
5C
|
214
|
D6
|
Ñ
|
Capital letter N with tilde
|
93
|
5D
|
209
|
D1
|
Ü
|
Capital letter U with diaeresis
|
94
|
5E
|
220
|
DC
|
§
|
Section sign
|
95
|
5F
|
167
|
A7
|
¿
|
Inverted question mark
|
96
|
60
|
191
|
BF
|
a
|
Small letter a
|
97
|
61
|
97
|
61
|
b
|
Small letter b
|
98
|
62
|
98
|
62
|
c
|
Small letter c
|
99
|
63
|
99
|
63
|
d
|
Small letter d
|
100
|
64
|
100
|
64
|
e
|
Small letter e
|
101
|
65
|
101
|
65
|
f
|
Small letter f
|
102
|
66
|
102
|
66
|
g
|
Small letter g
|
103
|
67
|
103
|
67
|
h
|
Small letter h
|
104
|
68
|
104
|
68
|
i
|
Small letter i
|
105
|
69
|
105
|
69
|
j
|
Small letter j
|
106
|
6A
|
106
|
6A
|
k
|
Small letter k
|
107
|
6B
|
107
|
6B
|
l
|
Small letter l
|
108
|
6C
|
108
|
6C
|
m
|
Small letter m
|
109
|
6D
|
109
|
6D
|
n
|
Small letter n
|
110
|
6E
|
110
|
6E
|
o
|
Small letter o
|
111
|
6F
|
111
|
6F
|
p
|
Small letter p
|
112
|
70
|
112
|
70
|
q
|
Small letter q
|
113
|
71
|
113
|
71
|
r
|
Small letter r
|
114
|
72
|
114
|
72
|
s
|
Small letter s
|
115
|
73
|
115
|
73
|
t
|
Small letter t
|
116
|
74
|
116
|
74
|
u
|
Small letter u
|
117
|
75
|
117
|
75
|
v
|
Small letter v
|
118
|
76
|
118
|
76
|
w
|
Small letter w
|
119
|
77
|
119
|
77
|
x
|
Small letter x
|
120
|
78
|
120
|
78
|
y
|
Small letter y
|
121
|
79
|
121
|
79
|
z
|
Small letter z
|
122
|
7A
|
122
|
7A
|
ä
|
Small letter a with diaeresis
|
123
|
7B
|
228
|
E4
|
ö
|
Small letter o with diaeresis
|
124
|
7C
|
246
|
F6
|
ñ
|
Small letter n with tilde
|
125
|
7D
|
241
|
F1
|
ü
|
Small letter u with diaeresis
|
126
|
7E
|
252
|
FC
|
à
|
Small letter a with grave accent
|
127
|
7F
|
224
|
E0
|