在開發中打印 NSDictionary 會出現中文亂碼,到網上查了這個問題,發現一篇文章(連接),雖然解決了亂碼問題,可是打亂了輸出格式,這個買賣可划不來。乾脆本身寫一個擴展,解決亂碼問題。文章最後給出了Demo地址git
#說說解決中文亂碼的原理 ###一、先介紹3個方法,這是打印NSDictionary、NSArray,時所調用的github
- (NSString *)description ;
- (NSString *)descriptionWithLocale:(nullable id)locale;
- (NSString *)descriptionWithLocale:(nullable id)locale indent:(NSUInteger)level;
複製代碼
##做用與區別 ###(1)、三個方法的做用: 將NSDictionary、NSArray對象轉化爲字符串。 ###(2)、區別算法
- (NSString *)description ;
在控制檯使用po 命令時,輸出的文字就是這個方法返回的
複製代碼
- (NSString *)descriptionWithLocale:(nullable id)locale;
用NSLog打印的文字是這個方法返回的
複製代碼
能夠看看下面的圖。 數組
- (NSString *)descriptionWithLocale:(nullable id)locale indent:(NSUInteger)level;
這個方法和第二個方法相比,多了個 level 參數,表明所打印的文字向右平移 level 個字符(我用的"\t")。
複製代碼
下圖中分別是 level 傳0 和 2 的狀況。 bash
- (NSString *)descriptionWithLevel:(int)level
複製代碼
level最少爲 1,表明最外層,若是發現某個key對應的value也是NSDictionary,那麼遞歸調用這個方法,只是,level要傳(level + 1)。 ##總結:解決這個問題的關鍵應該是算法,對遞歸算法不熟的同窗,能夠到網上搜索一下。 Demo地址spa