@@ -222,58 +222,38 @@ extension String.Encoding {
222222    ///         to determine which encoding is suitable.
223223    @available ( FoundationPreview 6 . 3 ,  * )  
224224    public  init ? ( ianaName charsetName:  String )  { 
225+         let  possibilities :  [ String . Encoding ]  =  [ 
226+             . utf8, 
227+             . ascii, 
228+             . japaneseEUC, 
229+             . isoLatin1, 
230+             . shiftJIS, 
231+             . isoLatin2, 
232+             . unicode,  // .utf16
233+             . windowsCP1251, 
234+             . windowsCP1252, 
235+             . windowsCP1253, 
236+             . windowsCP1254, 
237+             . windowsCP1250, 
238+             . iso2022JP, 
239+             . macOSRoman, 
240+             . utf16BigEndian, 
241+             . utf16LittleEndian, 
242+             . utf32, 
243+             . utf32BigEndian, 
244+             . utf32LittleEndian, 
245+         ] 
246+ 
225247        func  __determineEncoding( )  ->  String . Encoding ?   { 
226-             func  __matches( _ charsets:  IANACharset ... )  ->  Bool  { 
227-                 assert ( !charsets. isEmpty) 
228-                 return  charsets. contains  { 
229-                     $0. matches ( 
230-                         charsetName, 
231-                         tokenizedBy:  ASCIICaseInsensitiveTokenizer . self
232-                     ) 
248+             for  encoding  in  possibilities { 
249+                 guard  let  ianaCharset =  encoding. _ianaCharset else  { 
250+                     continue 
251+                 } 
252+                 if  ianaCharset. matches ( charsetName,  tokenizedBy:  ASCIICaseInsensitiveTokenizer . self)  { 
253+                     return  encoding
233254                } 
234255            } 
235- 
236-             return  if  __matches ( . utf8)  { 
237-                 . utf8
238-             }  else  if  __matches ( . usASCII)  { 
239-                 . ascii
240-             }  else  if  __matches ( . eucJP)  { 
241-                 . japaneseEUC
242-             }  else  if  __matches ( . iso8859_1)  { 
243-                 . isoLatin1
244-             }  else  if  __matches ( . shiftJIS)  { 
245-                 . shiftJIS
246-             }  else  if  __matches ( . iso8859_2)  { 
247-                 . isoLatin2
248-             }  else  if  __matches ( . utf16)  { 
249-                 . utf16
250-             }  else  if  __matches ( . windows1251)  { 
251-                 . windowsCP1251
252-             }  else  if  __matches ( . windows1252)  { 
253-                 . windowsCP1252
254-             }  else  if  __matches ( . windows1253)  { 
255-                 . windowsCP1253
256-             }  else  if  __matches ( . windows1254)  { 
257-                 . windowsCP1254
258-             }  else  if  __matches ( . windows1250)  { 
259-                 . windowsCP1250
260-             }  else  if  __matches ( . iso2022JP)  { 
261-                 . iso2022JP
262-             }  else  if  __matches ( . macintosh)  { 
263-                 . macOSRoman
264-             }  else  if  __matches ( . utf16BE)  { 
265-                 . utf16BigEndian
266-             }  else  if  __matches ( . utf16LE)  { 
267-                 . utf16LittleEndian
268-             }  else  if  __matches ( . utf32)  { 
269-                 . utf32
270-             }  else  if  __matches ( . utf32BE)  { 
271-                 . utf32BigEndian
272-             }  else  if  __matches ( . utf32LE)  { 
273-                 . utf32LittleEndian
274-             }  else  { 
275-                 nil 
276-             } 
256+             return  nil 
277257        } 
278258
279259        guard  let  encoding =  __determineEncoding ( )  else  { 
0 commit comments