检测Base 64字符串是图像还是文本

时间:2014-03-08 18:22:59

标签: objective-c cocoa base64 nsdata

有没有办法检测NSData实例中包含的Base 64字符串是图像,文本还是其他任何对象?

2 个答案:

答案 0 :(得分:3)

你通常不能只查看base 64字符串并决定,但你可以解码数据的前几个字节,查看十六进制代码(你可以通过将base-64字符串解码为{{}来实现这一点。 1}}只是NSData或在调试器中检查它,并得出一些结论。例如:

  • 图像文件通常以特殊字节序列开头(例如JPEG以十六进制字节NSLog开始; PNG通常以十六进制字节FF D8开头(例如89 50 4E 47 0D 0A 1A 0A等)注意,有一些令人眼花缭乱的不同图像格式,所以这是一个非常重要的练习,但有时候你会很幸运,当你瞥一眼前几个字节时,这是一种常见的格式是不言而喻的。

  • 89 "PNG" CR LF EOF LF档案通常以字符串“NSKeyedArchiver”开头。

  • ASCII文本由bplist20之间的代码组成(换行符由7F表示;回车符和换行符由0A表示;制表符为OD 0A {1}};等)。然后,再次,如果它是一个文本,它们不太可能是base-64编码。

  • 如果是UTF-8,它将符合here概述的编码模式。例如,您可以查看可能可以想象代表UTF-8字符的第一个字节的前几个高位,并得出(a)字符表示的字节数和(b)将打开哪些高位那些后续的字节。您通常可以快速查看并确认数据是否符合此UTF-8模式(对于大多数西方语言来说尤其容易)

  • 如果前三个字符为09,则通常表示UTF-8 byte order mark

这绝不是一个详尽的代码清单,但只有少数代码突然出现在我身上。

要以编程方式执行此操作并且详尽地执行此操作将是一项非常重要的练习。但是,如果你只是“瞄准”一个base-64字符串并尝试绘制一些逻辑推理,解码它并查看十六进制字节,你至少可以迅速缩小可能性。如果您不确定如何解释它,请使用解码的base-64字符串的十六进制表示更新您的问题(请前16-32字节),我们可能会指出您正确的方向。

答案 1 :(得分:0)

无法清楚地区分文本字符串和Base64图像编码字符串。唯一的方法 - 检查您的字符串是否是有效的Base 64编码字符串。如果是 - 可能是图像。如果没有 - 你可以确定它是一个文本。

如何检查字符串是否有效Base 64你可以How to check whether the string is base64 encoded or not