2011-09-28 18 views
0

我有一个文件,我需要从中获取一些数据,但是当我读取它时我只能得到零。使用NSString或NSData从文件中读取十六进制值的问题

文件包含

 
K vU™"3Dô 
U0?* 

十六进制值

1B 1B 01 1B 4B 07 20 1B 76 02 06 55 AA 11 22 33 44 99 20 0A 1B 55 30 1B 1B 3F 0C 1B 2A 01 0C 0C 

我试图读取该文件的几种方法,但总是零,当我把它变成一个字符串。

NSData *textData = [[NSData alloc] initWithContentsOfFile:filename]; 

NSLog(@"%@",[textData description]); 
//prints out <1b1b011b 4b07201b 76020655 aa112233 4499200a 1b55301b 1b3f0c1b 2a010c0c> 

text = [[NSString alloc] initWithData:textData encoding:NSUTF8StringEncoding]; 
//at this point text is nil 

text = [[NSString alloc] initWithContentsOfFile:filename encoding:NSUTF8StringEncoding error:err]; 
//at this point text is still nil 

text = [NSString stringWithContentsOfFile:filename encoding:NSUTF8StringEncoding error:err]; 
//at this point text is still nil 

我知道它读取文件。我可以打印出属性并看到它的大小是30.我错过了什么/我做错了什么?

回答

1

您的文件很可能不会以UTF8编码。这就是为什么试图将数据解释为某些UTF8字符串失败的原因。

您确定它不是UTF-16(LE或BE)或任何其他编码吗? (或者干脆ASCII - 与一些非打印字符)

+0

即时猜测它与大小或一些字符有关。我有几个文件需要阅读,这是迄今为止唯一一个导致问题的文件,但我看不出问题所在。我想我只需要浏览一下,看看它喜欢哪个角色就可以有更好的想法 – AtomRiot

+0

看起来文件中的文本包含很多**控制字符,这可能是解码过程中混淆的东西。参见[这里](http://software.hixie.ch/utilities/cgi/unicode-decoder/utf8-decoder?encoding=hex&bytes=1B1B011B4B07201B76020655AA1122334499200A1B55301B1B3F0C1B2A010C0C)(从[本站](http://software.hixie.ch/ utilities/cgi/unicode-decoder/utf8-decoder))来详细解释UTF8中的十六进制字节。 – AliSoftware

+0

看起来像这种情况下它是AA和99个字符。哼。感谢那个网站! – AtomRiot

-1

如何text = [[NSString alloc] initWithString:[textData description]];? :)

+0

这似乎并没有得到解释的数据之前,谷歌搜索“UTF8解码”,而是变成了十六进制值转换为字符值。换句话说,代替字符'0x1b'它将1b打印为2个字符。 – AtomRiot

相关问题