干杯,
我的应用程序需要将 NSData 对象的内容作为 GET 请求的参数发送到网络服务器。它应该能够在稍后的时间接收回完全相同的数据。数据将以长文本形式存储在 mysql 数据库中,内容我不知道,可能是任何东西。
要实现此目的,我需要将其转换为 NSString,但我应该选择哪种编码?只要两种方式都相同,我选择哪一种就很重要吗?
谢谢!!
最佳答案
如果您确实需要将数据转换为字符串,请使用 Unicode 编码,因为 unicode 为每个可能的字符提供一个代码点。最常见的unicode编码显然是UTF-8 (NSUTF8StringEncoding
)
但是,如果这是您需要传输的任意数据,并且该数据不代表字符串,则无论采用何种编码,都不要将其转换为字符串。这会导致问题(例如,如果您的数据包含零字节,它将被视为字符串终止符等)
相反,如果您需要将一些原始数据传输到服务器,请考虑:
- 如果可能,使用 POST 而不是 GET
- 以 Base64 编码您的数据,这样您就可以确保在转换时或从客户端传输到服务器期间不会丢失任何数据(或者更糟糕的是,通过转换为任意编码)
- 如果您的服务器上可能(如果它是您的服务器并且您有权访问代码),请在收到时将 Base64 编码的字符串解码回原始数据,然后将其存储在 BLOB 字段中 VARCHAR 或 BIGTEXT 字段中的。
- 如果您无法访问服务器代码,并且无法选择将其存储在数据库中的 TEXT/VARCHAR 字段中,您仍然可以将表示数据的 Base64 编码字符串直接存储在数据库中(并对其进行解码)当您稍后从数据库检索它时)。
请参阅 Google for Objective-C 中的 Base64 编码,其中有大量对广泛使用的 NSString+Base64 类别的引用。
关于iphone - 如果字符串不需要很漂亮,我应该使用哪种编码将 NSData 转换为 NSString 以及向后转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6416090/