Quantcast
Channel: 應用教學 – Hiraku Dev
Viewing all articles
Browse latest Browse all 94

iOS 13.1.1 之後,在香港、澳門的 Emoji 鍵盤不會出現中華民國國旗了

$
0
0

中華民國國旗,也就是「🇹🇼」符號,長久以來一直無法在中國版、或者設定地區為中國的 iPhone 使用,相信這是大家早就知道的事情。然而根據使用者回報,在 iOS 13.1.1 之後,在香港的 iPhone 上,Emoji 鍵盤中的「🇹🇼」居然消失了?!

▼ 香港討論區裡面關於 iOS 13.1.1 無法輸入中華民國國旗的討論

 

在開始之前,讓我們先用一張圖片來表示我們的震驚

 

接下來,我們將會透過逆向分析的方式,來比較一下 Emoji 鍵盤在 iOS 13.1.1 之後的改變。

(為了某些方便性,本文會拿 iOS 13.0 跟 iOS 13.2 beta 來比較。)

 

經過各種搜尋結果後,我們先將目標放在 EmojiFoundation 這個 framework 上,會找到

@interface EMFEmojiCategory : NSObject
+ (id)computeEmojiFlagsSortedByLanguage
@end

這個 method。

透過逆向分析,可以得到 iOS 13 的程式碼大致如下(程式碼為了易讀性,我有把一些冗余的部分精簡或刪除):

+ (id)computeEmojiFlagsSortedByLanguage 
{
    NSMutableArray *array = [NSMutableArray arrayWithArray:[EMFEmojiCategory flagEmojiCountryCodesCommon」; //獲得大部分的國旗 Emoji
    NSString *regionCode = _EMFGetDeviceRegionCode(); //獲得裝置地區(硬體)
    
    if (![regionCode isEqualToString:@"CH"]) 
    {
        NSString *locale = [[NSLocale currentLocale] objectForKey: NSLocaleCountryCode]; //獲得設定裡面的地區(軟體)
        if (![locale isEqualToString:@"CN"]) 
        {
            [array addObject:@"TW"]; //檢查通過,增加 TW Emoji(中華民國國旗)
        }
    }
//... 後面不重要
}

但是在 iOS 13.2,卻變成了這樣:

+ (id)computeEmojiFlagsSortedByLanguage 
{
    NSMutableArray *array = [NSMutableArray arrayWithArray:[EMFEmojiCategory flagEmojiCountryCodesCommon」; //獲得大部分的國旗 Emoji
    NSString *regionCode = _EMFGetDeviceRegionCode(); //獲得裝置地區(硬體)

    if (![regionCode isEqualToString:@"CH"] && ![regionCode isEqualToString:@"ZA"]) 
    {
        NSString *locale = [[NSLocale currentLocale] objectForKey: NSLocaleCountryCode]; //獲得設定裡面的地區(軟體)
        if (![locale isEqualToString:@"CN"] && ![locale isEqualToString:@"MO"] && ![locale isEqualToString:@"HK"]) 
        {
            [array addObject:@"TW"]; //檢查通過,增加 TW Emoji(中華民國國旗)
        }
    }
//... 後面不重要
}

在上面的程式碼部分,我們可以看到 iOS 13.2 (實際是 13.1.1 以上)出現了比較大的兩個變化:

  1. 硬體裝置地區為 ZA 的所有裝置再也不會增加中華民國國旗到 Emoji 列表
  2. 設定軟體地區為香港、澳門,並且顯示語言不是「繁體中文 (台灣)」的話,同樣也不會增加中華民國國旗到 Emoji 列表

這個推文清楚比較了截圖,大家應該更容易理解。

這邊特別需要注意的是,ZA 這個型號,在 iPhone XS/XR 之後,是香港地區的固定型號,在 iPhone X 之前,香港是 ZP,ZA 不確定是哪裡(網路上講新加坡都亂講的,不要相信他,新加坡現在是 ZP,以前不確定)

因此我們得知,在 iOS 13.1.1 之後,地區設定為中國、香港、澳門的裝置,以及香港(XS 之後)、中國所販賣的裝置,不會在 Emoji 列表中出現中華民國國旗。

不過,由於在顯示方面,iOS 13.2 沒有把香港、澳門列為無法顯示中華民國國旗的地區,所以顯示依然是沒問題的。此外,如果真的要輸入 🇹🇼,可以用輸入法打字輸入「台灣」或「Taiwan」,應該還是有辦法輸入此 Emoji。

只不過,Apple 這樣做用意到底為何?剛好最近兩岸三地也是敏感時期,這樣的作法,難免會讓人聯想到中國施壓,或者 Apple 自我審查就是了…


 

2019.10.06 更新:

沒想到後續居然有了這個符號是中華民國還是台灣國旗的爭議。讓我們撇開 iOS、macOS 輸入「台灣」或「Taiwan」會出現「🇹🇼」,但輸入中華民國不會出現符號的這種想法,畢竟這是廠商自己的程式判定,不代表任何意義。

在 Unicode 定義裡面裡面「🇹🇼」這個符號是兩個字元的組合 U+1F1F9 (T) + U+1F1FC (W)。 Unicode 定義裡面沒有什麼 ROC,就是寫明了這個符號的定義是 TW。 然而 Unicode 的原則是,給了各個國家跟地區旗幟的代碼,各家廠商要怎麼畫這個符號是他們的事情,也可以選擇不要畫出來。然而,現在所有有畫此 emoji 的廠商都是畫青天白日滿地紅,所以這個 emoji 目前的正確定義就是一個 「把中華民國國旗畫在原本用來顯示台灣國旗符號的 emoji」 。技術上來講的好處就是,要是哪一天,或者在某個平行宇宙內,台灣換了一個新的國旗,各家廠商只要更新系統, 在換國旗之前發佈的所有網路文章、所有 App 裡面的現有 TW 國旗符號都會直接換成新國旗,而不需要重新定義一個新的符號。

這篇文章 iOS 13.1.1 之後,在香港、澳門的 Emoji 鍵盤不會出現中華民國國旗了 最早出現於 Hiraku Dev


Viewing all articles
Browse latest Browse all 94

Trending Articles