中華民國國旗,也就是「」符號,長久以來一直無法在中國版、或者設定地區為中國的 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 以上)出現了比較大的兩個變化:
- 硬體裝置地區為 ZA 的所有裝置再也不會增加中華民國國旗到 Emoji 列表
- 設定軟體地區為香港、澳門,並且顯示語言不是「繁體中文 (台灣)」的話,同樣也不會增加中華民國國旗到 Emoji 列表
這個推文清楚比較了截圖,大家應該更容易理解。
Apple’s region lock of ROC Taiwan flag extended beyond CN devices to HK and Macau’s in the iOS/iPadOS 13.1.1 rollout. Interestingly, the new lock only affects the keyboard, and has no problem displaying and is easy to bypass by switching region. https://t.co/RVRKNQyc1l pic.twitter.com/8eQXambiAQ
— 王博源 Wang Boyuan (@thisboyuan) October 3, 2019
這邊特別需要注意的是,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。