Swift-读取编码为“ charset = binary”的文件的字符串内容

问题描述

我必须使用Swift从具有编码-“ charset = binary”的文件中读取文本 当我检查此文件时,它显示的编码如下。

$文件-I /Users/kamyfc/Music/CrateTest.crate /Users/kamyfc/Music/CrateTest.crate:应用程序/八位字节流; charset = binary

我可以在TextEdit中打开文件并查看字符串,但是当我在Visual Studio Code或XCode中打开文件时,它们将不会显示字符串。

现在我这样做是为了读取Xcode中的字符串

    var stringContent = ""
    if let data1 = try? Data(contentsOf:crateFilePath) {
        if let text = String(data: data1,encoding: .utf8) {
           stringContent = text
        } else if let text = String(data: data1,encoding: .macOSRoman) {
           stringContent = text
        } else if let text = String(data: data1,encoding: .ascii) {
           stringContent = text
        } else {
           stringContent = ""
        }
    }

当我执行代码时,变量“ stringContent”是从“ macOSRoman”编码中设置的。 当我在XCode中检查其内容时,只是一些我不理解的字符。

stringContent的打印说明: “ vrsn \ 0 \ 0 \ 08 \ 01 \ 0. \ 00 \ 0 / \ 0S \ 0e \ 0r \ 0a \ 0t \ 0o \ 0 \ 0S \ 0c \ 0r \ 0a \ 0t \ 0c \ 0h \ 0L \ 0i \ 0v \ 0e \ 0 \ 0C \ 0r \ 0a \ 0t \ 0eosrt \ 0 \ 0 \ 0 \ u {1B} tvcn \ 0 \ 0 \ 0 \ n \ 0a \ 0l \ 0b \ 0u \ 0mbrev \ 0 \ 0 \ 0 \ u {01} \ 0ovct \ 0 \ 0 \ 0 \ u {1A} tvcn \ 0 \ 0 \ 0 \ u {08} \ 0s \ 0o \ 0n \ 0gtvcw \ 0 \ 0 \ 0 \ u {02 } \ 00ovct \ 0 \ 0 \ 0 $ tvcn \ 0 \ 0 \ 0 \ u {12} \ 0p \ 0l \ 0a \ 0y \ 0C \ 0o \ 0u \ 0n \ 0ttvcw \ 0 \ 0 \ 0 \ u {02 } \ 00ovct \ 0 \ 0 \ 0 \ u {1E} tvcn \ 0 \ 0 \ 0 \ u {0C} \ 0a \ 0r \ 0t \ 0i \ 0s \ 0ttvcw \ 0 \ 0 \ 0 \ u {02} \ 00ovct \ 0 \ 0 \ 0 \ u {18} tvcn \ 0 \ 0 \ 0 \ u {06} \ 0b \ 0p \ 0mtvcw \ 0 \ 0 \ 0 \ u {02} \ 00ovct \ 0 \ 0 \ 0 \ u {18} tvcn \ 0 \ 0 \ 0 \ u {06} \ 0k \ 0e \ 0ytvcw \ 0 \ 0 \ 0 \ u {02} \ 00ovct \ 0 \ 0 \ 0 \ u {1C} tvcn \ 0 \ 0 \ 0 \ n \ 0a \ 0l \ 0b \ 0u \ 0mtvcw \ 0 \ 0 \ 0 \ u {02} \ 00ovct \ 0 \ 0 \ 0 \ u {1E} tvcn \ 0 \ 0 \ 0 \ u {0C } \ 0l \ 0e \ 0n \ 0g \ 0t \ 0htvcw \ 0 \ 0 \ 0 \ u {02} \ 00ovct \ 0 \ 0 \ 0 tvcn \ 0 \ 0 \ 0 \ u {0E} \ 0c \ 0o \ 0m \ 0m \ 0e \ 0n \ 0ttvcw \ 0 \ 0 \ 0 \ u {02} \ 00otrk \ 0 \ 0 \ 0 \ 0pptrk \ 0 \ 0 \ 0h \ 0U \ 0s \ 0e \ 0r \ 0s \ 0s \ 0 / \ 0k \ 0a \ 0m \ 0y \ 0f \ 0c \ 0 / \ 0M \ 0u \ 0s \ 0i \ 0c \ 0 / \ 0K \ 0a \ 0m \ 0y \ 0 \ 0M \ 0u \ 0s \ 0i \ 0c \ 0 / \ 0E \ 0n \ 0y \ 0a \ 0 / \ 01 \ 00 \ 0 \ 0O \ 0n \ 0e \ 0 \ 0b \ 0y \ 0 \ 0O \ 0n \ 0e \ 0. \ 0m \ 04 \ 0aotrk \ 0 \ 0 \ 0 | ptrk \ 0 \ 0 \ 0t \ 0U \ 0s \ 0e \ 0r \ 0s \ 0 / \ 0k \ 0a \ 0m \ 0y \ 0f \ 0c \ 0 / \ 0M \ 0u \ 0s \ 0i \ 0c \ 0 / \ 0K \ 0a \ 0m \ 0y \ 0 \ 0M \ 0u \ 0s \ 0i \ 0c \ 0 / \ 0E \ 0n \ 0y \ 0a \ 0 / \ 00 \ 03 \ 0 \ 0E \ 0n \ 0y \ 0a \ 0 \ 0- \ 0 \ 0O \ 0n \ 0l \ 0y \ 0 \ 0T \ 0i \ 0m \ 0e \ 0. \ 0m \ 04 \ 0aotrk \ 0 \ 0 \ 0 \ 0pptrk \ 0 \ 0 \ 0h \ 0U \ 0s \ 0e \ 0r \ 0s \ 0 / \ 0k \ 0a \ 0m \ 0y \ 0f \ 0c \ 0 / \ 0M \ 0u \ 0s \ 0i \ 0c \ 0 / \ 0K \ 0a \ 0m \ 0y \ 0 \ 0M \ 0u \ 0s \ 0i \ 0c \ 0 / \ 0E \ 0n \ 0y \ 0a \ 0 / \ 00 \ 02 \ 0 \ 0W \ 0i \ 0l \ 0d \ 0 \ 0C \ 0h \ 0i \ 0l \ 0d \ 0. \ 0m \ 04 \ 0aotrk \ 0 \ 0 \0Äptrk\ 0 \ 0 \ 0x \ 0U \ 0s \ 0e \ 0r \ 0s \ 0 / \ 0k \ 0a \ 0m \ 0y \ 0f \ 0c \ 0 / \ 0M \ 0u \ 0s \ 0i \ 0c \ 0 / \ 0K \ 0a \ 0m \ 0y \ 0 \ 0M \ 0u \ 0s \ 0i \ 0c \ 0 / \ 0E \ 0n \ 0y \ 0a \ 0 / \ 00 \ 01 \ 0 \ 0A \ 0 \ 0D \ 0a \ 0y \ 0 \ 0W \ 0i \ 0t \ 0h \ 0o \ 0u \ 0t \ 0 \ 0R \ 0a \ 0i \ 0n \ 0. \ 0m \ 04 \ 0a“


但是我可以对字符串进行操作,但是我不能以任何有意义的方式使用它。 例如,我拆分“ stringContent”变量的内容提取一些本地文件路径。我可以打印字符串的内容,但是当我在XCode中观察时,看到的是奇怪的\ 0 \ 0 \ 0格式。 同样,当从文件中读取的有效路径字符串中获取URL时,Xcode会说'url'为nil

let url = URL(fileURLWithPath: localFilePath)
print(url) //always is nil

当我检查“ localFilePath”时,我得到了这个乱码

  • 4:“ \ 0 \ 0 \ 0x \ 0U \ 0s \ 0e \ 0r \ 0s \ 0 / \ 0k \ 0a \ 0m \ 0y \ 0f \ 0c \ 0 / \ 0M \ 0u \ 0s \ 0i \ 0c \ 0 / \ 0K \ 0a \ 0m \ 0y \ 0 \ 0M \ 0u \ 0s \ 0i \ 0c \ 0 / \ 0E \ 0n \ 0y \ 0a \ 0 / \ 00 \ 01 \ 0 \ 0A \ 0 \ 0D \ 0a \ 0y \ 0 \ 0W \ 0i \ 0t \ 0h \ 0o \ 0u \ 0t \ 0 \ 0R \ 0a \ 0i \ 0n \ 0. \ 0m \ 04 \ 0a“

但是,当我在控制台中打印它时,我会看到正确的文件路径。我只是不明白发生了什么。

所以问题是我如何从文件中读取正确的“字符串”格式的字符串,我知道其中包含字符串,但是由于某种原因其编码为“ charset = binary”?

任何输入将不胜感激。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)