@@ -14,74 +14,91 @@ enum encoding ParseEncoding(const char* encoding,
14
14
enum encoding default_encoding) {
15
15
switch (encoding[0 ]) {
16
16
case ' u' :
17
+ case ' U' :
17
18
// utf8, utf16le
18
19
if (encoding[1 ] == ' t' && encoding[2 ] == ' f' ) {
19
20
// Skip `-`
20
- encoding + = encoding[3 ] == ' -' ? 4 : 3 ;
21
- if (encoding[0 ] == ' 8' && encoding[1 ] == ' \0 ' )
21
+ const size_t skip = encoding[3 ] == ' -' ? 4 : 3 ;
22
+ if (encoding[skip ] == ' 8' && encoding[skip + 1 ] == ' \0 ' )
22
23
return UTF8;
23
- if (strncmp (encoding, " 16le" , 4 ) == 0 )
24
+ if (strncmp (encoding + skip , " 16le" , 5 ) == 0 )
24
25
return UCS2;
25
-
26
26
// ucs2
27
27
} else if (encoding[1 ] == ' c' && encoding[2 ] == ' s' ) {
28
- encoding + = encoding[3 ] == ' -' ? 4 : 3 ;
29
- if (encoding[0 ] == ' 2' && encoding[1 ] == ' \0 ' )
28
+ const size_t skip = encoding[3 ] == ' -' ? 4 : 3 ;
29
+ if (encoding[skip ] == ' 2' && encoding[skip + 1 ] == ' \0 ' )
30
30
return UCS2;
31
31
}
32
+ if (StringEqualNoCase (encoding, " utf8" ))
33
+ return UTF8;
34
+ if (StringEqualNoCase (encoding, " utf-8" ))
35
+ return UTF8;
36
+ if (StringEqualNoCase (encoding, " ucs2" ))
37
+ return UCS2;
38
+ if (StringEqualNoCase (encoding, " ucs-2" ))
39
+ return UCS2;
40
+ if (StringEqualNoCase (encoding, " utf16le" ))
41
+ return UCS2;
42
+ if (StringEqualNoCase (encoding, " utf-16le" ))
43
+ return UCS2;
32
44
break ;
45
+
33
46
case ' l' :
47
+ case ' L' :
34
48
// latin1
35
49
if (encoding[1 ] == ' a' ) {
36
- if (strncmp (encoding + 2 , " tin1" , 4 ) == 0 )
50
+ if (strncmp (encoding + 2 , " tin1" , 5 ) == 0 )
37
51
return LATIN1;
38
52
}
53
+ if (StringEqualNoCase (encoding, " latin1" ))
54
+ return LATIN1;
39
55
break ;
56
+
40
57
case ' b' :
41
- // binary
58
+ case ' B' :
59
+ // binary is a deprecated alias of latin1
42
60
if (encoding[1 ] == ' i' ) {
43
- if (strncmp (encoding + 2 , " nary" , 4 ) == 0 )
61
+ if (strncmp (encoding + 2 , " nary" , 5 ) == 0 )
44
62
return LATIN1;
45
-
46
63
// buffer
47
64
} else if (encoding[1 ] == ' u' ) {
48
- if (strncmp (encoding + 2 , " ffer" , 4 ) == 0 )
65
+ if (strncmp (encoding + 2 , " ffer" , 5 ) == 0 )
49
66
return BUFFER;
67
+ // base64
68
+ } else if (encoding[1 ] == ' a' ) {
69
+ if (strncmp (encoding + 2 , " se64" , 5 ) == 0 )
70
+ return BASE64;
50
71
}
72
+ if (StringEqualNoCase (encoding, " binary" ))
73
+ return LATIN1; // BINARY is a deprecated alias of LATIN1.
74
+ if (StringEqualNoCase (encoding, " buffer" ))
75
+ return BUFFER;
76
+ if (StringEqualNoCase (encoding, " base64" ))
77
+ return BASE64;
51
78
break ;
52
- case ' \0 ' :
53
- return default_encoding;
54
- default :
79
+
80
+ case ' a' :
81
+ case ' A' :
82
+ // ascii
83
+ if (encoding[1 ] == ' s' ) {
84
+ if (strncmp (encoding + 2 , " cii" , 4 ) == 0 )
85
+ return ASCII;
86
+ }
87
+ if (StringEqualNoCase (encoding, " ascii" ))
88
+ return ASCII;
55
89
break ;
56
- }
57
90
58
- if (StringEqualNoCase (encoding, " utf8" )) {
59
- return UTF8;
60
- } else if (StringEqualNoCase (encoding, " utf-8" )) {
61
- return UTF8;
62
- } else if (StringEqualNoCase (encoding, " ascii" )) {
63
- return ASCII;
64
- } else if (StringEqualNoCase (encoding, " base64" )) {
65
- return BASE64;
66
- } else if (StringEqualNoCase (encoding, " ucs2" )) {
67
- return UCS2;
68
- } else if (StringEqualNoCase (encoding, " ucs-2" )) {
69
- return UCS2;
70
- } else if (StringEqualNoCase (encoding, " utf16le" )) {
71
- return UCS2;
72
- } else if (StringEqualNoCase (encoding, " utf-16le" )) {
73
- return UCS2;
74
- } else if (StringEqualNoCase (encoding, " latin1" )) {
75
- return LATIN1;
76
- } else if (StringEqualNoCase (encoding, " binary" )) {
77
- return LATIN1; // BINARY is a deprecated alias of LATIN1.
78
- } else if (StringEqualNoCase (encoding, " buffer" )) {
79
- return BUFFER;
80
- } else if (StringEqualNoCase (encoding, " hex" )) {
81
- return HEX;
82
- } else {
83
- return default_encoding;
91
+ case ' h' :
92
+ case ' H' :
93
+ // hex
94
+ if (encoding[1 ] == ' e' )
95
+ if (encoding[2 ] == ' x' && encoding[3 ] == ' \0 ' )
96
+ return HEX;
97
+ if (StringEqualNoCase (encoding, " hex" ))
98
+ return HEX;
99
+ break ;
84
100
}
101
+ return default_encoding;
85
102
}
86
103
87
104
0 commit comments