Just My Life & My Work

看不到的不代表不存在~」,寫程式也會遇到這個現象!我在比較日期字串時,發現明明兩者都是2018-07-17,卻被判斷出不一樣!?

[iOS] 移除看不見的字元 (Remove Invisible Character).png

好在透過取得字串長度,才發現真有看不見的字元「\0」!

(lldb) po firmwareVersionLabel.text.length
32

(lldb) po newVersionLabel.text.length
10

實際上2018-07-17只有10個字元,而韌體回傳卻有32個字元,於是知道後面看不到的字元共有22個。

韌體回傳的資訊:

{
boardName = “HappyStudio";
firmwareVersion = “2018-07-17″;
venderName = “Happy-Jason";
}

想要顯示在Label上,設中斷點印出來⋯⋯

Printing description of self->firmwareVersionLabel:
UILabel: 0x105c8c930; frame = (147 100; 173 32); text = ‘2018-07-17

Printing description of self->newVersionLabel:
UILabel: 0x105c3c970; frame = (147 139; 173 32); text = ‘2018-07-17’; opaque = NO; autoresize = RM+BM; userInteractionEnabled = NO; layer = <_UILabelLayer: 0x1c4284e20>>

可以看到看不見的字元無法印完整的資訊。

最後我透過移除看不見的字元 (Remove Invisible Character),來解決問題。

/**
 Theme: Remove Invisible Character
 IDE: Xcode 9
 Language: Objective C
 Date: 107/08/02
 Author: HappyMan
 Blog: https://cg2010studio.com/
 */

    NSString *str = firmwareVersionLabel.text;
    NSCharacterSet *characterset = [[NSCharacterSet characterSetWithCharactersInString:@"0123456789-"] invertedSet];
    firmwareVersionLabel.text = [str stringByTrimmingCharactersInSet:characterset];

字串我只想要包含「0123456789-」,可以透過反字元集合來做到移除不需要的字元。

Printing description of self->firmwareVersionLabel:
UILabel: 0x105c68760; frame = (147 100; 173 32); text = ‘2018-07-17’; opaque = NO; autoresize = RM+BM; userInteractionEnabled = NO; layer = <_UILabelLayer: 0x1c4282260>>

Printing description of self->newVersionLabel:
UILabel: 0x105c6c4d0; frame = (147 139; 173 32); text = ‘2018-07-17’; opaque = NO; autoresize = RM+BM; userInteractionEnabled = NO; layer = <_UILabelLayer: 0x1c4097cf0>>

寫程式有時候會遇到莫名的現象,也許都是種看不見的問題

參考:How do I remove hidden characters from a NSString?

隨意留個言吧:)~

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com 標誌

您的留言將使用 WordPress.com 帳號。 登出 /  變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 /  變更 )

連結到 %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.

標籤雲

%d 位部落客按了讚: