2011-09-28 22 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

相關問題