@@ -14,74 +14,91 @@ enum encoding ParseEncoding(const char* encoding,
1414 enum encoding default_encoding) {
1515 switch (encoding[0 ]) {
1616 case ' u' :
17+ case ' U' :
1718 // utf8, utf16le
1819 if (encoding[1 ] == ' t' && encoding[2 ] == ' f' ) {
1920 // 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 ' )
2223 return UTF8;
23- if (strncmp (encoding, " 16le" , 4 ) == 0 )
24+ if (strncmp (encoding + skip , " 16le" , 5 ) == 0 )
2425 return UCS2;
25-
2626 // ucs2
2727 } 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 ' )
3030 return UCS2;
3131 }
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;
3244 break ;
45+
3346 case ' l' :
47+ case ' L' :
3448 // latin1
3549 if (encoding[1 ] == ' a' ) {
36- if (strncmp (encoding + 2 , " tin1" , 4 ) == 0 )
50+ if (strncmp (encoding + 2 , " tin1" , 5 ) == 0 )
3751 return LATIN1;
3852 }
53+ if (StringEqualNoCase (encoding, " latin1" ))
54+ return LATIN1;
3955 break ;
56+
4057 case ' b' :
41- // binary
58+ case ' B' :
59+ // binary is a deprecated alias of latin1
4260 if (encoding[1 ] == ' i' ) {
43- if (strncmp (encoding + 2 , " nary" , 4 ) == 0 )
61+ if (strncmp (encoding + 2 , " nary" , 5 ) == 0 )
4462 return LATIN1;
45-
4663 // buffer
4764 } else if (encoding[1 ] == ' u' ) {
48- if (strncmp (encoding + 2 , " ffer" , 4 ) == 0 )
65+ if (strncmp (encoding + 2 , " ffer" , 5 ) == 0 )
4966 return BUFFER;
67+ // base64
68+ } else if (encoding[1 ] == ' a' ) {
69+ if (strncmp (encoding + 2 , " se64" , 5 ) == 0 )
70+ return BASE64;
5071 }
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;
5178 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;
5589 break ;
56- }
5790
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 ;
84100 }
101+ return default_encoding;
85102}
86103
87104
0 commit comments