NSLog 的奇怪行為
昨天發現了一個 NSLog() 的 bug 吧,那就是當要印出的字串內容全為 utf8中文,且只有單行時,NSLog 就不會印這個字串。
#import int main() { NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; NSString *string = [[NSString alloc] initWithContentsOfFile: @"utf8.txt" encoding: NSUTF8StringEncoding error: NULL]; NSLog(@"%@", string); return 0; }
而 utf8.txt 這個檔案的內容全部都是中文字且只有一行,用 utf8 編碼儲存。
Sigma [~/Desktop] -yllan- gcc nslogbug.m -o nslogbug -framework Cocoa Sigma [~/Desktop] -yllan- ./nslogbug Sigma [~/Desktop] -yllan-
夾雜一些英文以後: Sigma [~/Desktop] -yllan- emacs utf8.txt Sigma [~/Desktop] -yllan- ./nslogbug 2005-08-24 17:07:37.018 nslogbug[1730] 中文呵呵aaa Sigma [~/Desktop] -yllan-
這並不是 stdout 是 line buffer 的關係。如果是因為 line buffer 有印沒顯示出來,當後面繼續有輸出的時候應該就會把前面沒顯示的東西擠出來。可是當你在後面多印幾行東西的時候你會發現,前面的輸出完全消失了! 害我 debug 好久。