在 swift 5 中使用 UTF-8 解码字符串

Ena*_*que 3 utf-8 swift

我有 String swift 5。字符串如下所示..

\n\n
Kawran Bazar FDC Road, East Nakhalpara, \xc3\xa0\xc2\xa6\xc2\xa8\xc3\xa0\xc2\xa6\xc2\xbf\xc3\xa0\xc2\xa6\xc3\xa0\xc2\xa7\xc3\xa0\xc2\xa6\xc2\xa4\xc3\xa0\xc2\xa6\xc2\xa8, \xc3\xa0\xc2\xa6\xc2\xa2\xc3\xa0\xc2\xa6\xc2\xbe\xc3\xa0\xc2\xa6\xc3\xa0\xc2\xa6\xc2\xbe, \xc3\xa0\xc2\xa6\xc2\xa2\xc3\xa0\xc2\xa6\xc2\xbe\xc3\xa0\xc2\xa6\xc3\xa0\xc2\xa6\xc2\xbe \xc3\xa0\xc2\xa6\xc2\xac\xc3\xa0\xc2\xa6\xc2\xbf\xc3\xa0\xc2\xa6\xc2\xad\xc3\xa0\xc2\xa6\xc2\xbe\xc3\xa0\xc2\xa6, \xc3\xa0\xc2\xa6\xc2\xac\xc3\xa0\xc2\xa6\xc2\xbe\xc3\xa0\xc2\xa6\xc3\xa0\xc2\xa6\xc2\xb2\xc3\xa0\xc2\xa6\xc2\xbe\xc3\xa0\xc2\xa6\xc2\xa6\xc3\xa0\xc2\xa7\xc3\xa0\xc2\xa6\xc2\xb6\n
Run Code Online (Sandbox Code Playgroud)\n\n

我需要转换它。我尝试了如下

\n\n
 let data = location_name.data(using: .utf8)\n  var str =  String(decoding:data!, as: UTF8.self)\n    print("location_name***",str)\n
Run Code Online (Sandbox Code Playgroud)\n\n

但需要像上面一样转换下面的字符串

\n\n
Kawran Bazar FDC Road, East Nakhalpara, \xe0\xa6\xa8\xe0\xa6\xbf\xe0\xa6\x95\xe0\xa7\x87\xe0\xa6\xa4\xe0\xa6\xa8, \xe0\xa6\xa2\xe0\xa6\xbe\xe0\xa6\x95\xe0\xa6\xbe, \xe0\xa6\xa2\xe0\xa6\xbe\xe0\xa6\x95\xe0\xa6\xbe \xe0\xa6\xac\xe0\xa6\xbf\xe0\xa6\xad\xe0\xa6\xbe\xe0\xa6\x97, \xe0\xa6\xac\xe0\xa6\xbe\xe0\xa6\x82\xe0\xa6\xb2\xe0\xa6\xbe\xe0\xa6\xa6\xe0\xa7\x87\xe0\xa6\xb6\n
Run Code Online (Sandbox Code Playgroud)\n\n

如何解决问题

\n

Rob*_*ier 6

这是如果 UTF-8 数据在某个时刻被解释为 Latin1 时得到的输出。例如:

\n\n
let s = "Kawran Bazar FDC Road, East Nakhalpara, \xe0\xa6\xa8\xe0\xa6\xbf\xe0\xa6\x95\xe0\xa7\x87\xe0\xa6\xa4\xe0\xa6\xa8, \xe0\xa6\xa2\xe0\xa6\xbe\xe0\xa6\x95\xe0\xa6\xbe, \xe0\xa6\xa2\xe0\xa6\xbe\xe0\xa6\x95\xe0\xa6\xbe \xe0\xa6\xac\xe0\xa6\xbf\xe0\xa6\xad\xe0\xa6\xbe\xe0\xa6\x97, \xe0\xa6\xac\xe0\xa6\xbe\xe0\xa6\x82\xe0\xa6\xb2\xe0\xa6\xbe\xe0\xa6\xa6\xe0\xa7\x87\xe0\xa6\xb6"\nlet utf8Data = Data(s.utf8)\nlet latin1 = String(data: utf8Data, encoding: .isoLatin1)!\nprint(latin1)\n\n==> \n\nKawran Bazar FDC Road, East Nakhalpara, \xc3\xa0\xc2\xa6\xc2\xa8\xc3\xa0\xc2\xa6\xc2\xbf\xc3\xa0\xc2\xa6\xc3\xa0\xc2\xa7\xc3\xa0\xc2\xa6\xc2\xa4\xc3\xa0\xc2\xa6\xc2\xa8, \xc3\xa0\xc2\xa6\xc2\xa2\xc3\xa0\xc2\xa6\xc2\xbe\xc3\xa0\xc2\xa6\xc3\xa0\xc2\xa6\xc2\xbe, \xc3\xa0\xc2\xa6\xc2\xa2\xc3\xa0\xc2\xa6\xc2\xbe\xc3\xa0\xc2\xa6\xc3\xa0\xc2\xa6\xc2\xbe \xc3\xa0\xc2\xa6\xc2\xac\xc3\xa0\xc2\xa6\xc2\xbf\xc3\xa0\xc2\xa6\xc2\xad\xc3\xa0\xc2\xa6\xc2\xbe\xc3\xa0\xc2\xa6, \xc3\xa0\xc2\xa6\xc2\xac\xc3\xa0\xc2\xa6\xc2\xbe\xc3\xa0\xc2\xa6\xc3\xa0\xc2\xa6\xc2\xb2\xc3\xa0\xc2\xa6\xc2\xbe\xc3\xa0\xc2\xa6\xc2\xa6\xc3\xa0\xc2\xa7\xc3\xa0\xc2\xa6\xc2\xb6\n
Run Code Online (Sandbox Code Playgroud)\n\n

您应该首先尝试修复此问题并删除此错误的字符串创建。如果不能,那么您可以通过 Latin1 往返。

\n\n
let latin1Data = latin1.data(using: .isoLatin1)!\nlet utf8String = String(data: latin1Data, encoding: .utf8)!\n\nutf8String == s // true\n
Run Code Online (Sandbox Code Playgroud)\n