close

  如同文章標題 Title 所示,在使用 FireMonkey 開發 iOS 的程式上遭遇到亂碼問題,這陣子更新 blog 的速度比較慢,除了工作比較忙碌外,同時也是因為亂碼問題遲遲無法獲得解決,投入了不少時間研究處理的關係。

  記得在「How to Connect to a Database in XE2 @ iOS(二)」這篇文章內,曾經提過說中文沒有問題,是的,當時會認為沒問題,是因為當時撰寫的測試程式在兩個部分使用了中文,第一個部分是在設計階段的元件上於 property 屬性比如 Text 輸入中文字,另外一個部分就是透過 DataSnap 傳過來的 json 格式中文資料,可以正確顯示在執行階段的元件上,既然設計階段打的中文與執行階段指定 property 顯示中文都沒有問題,自然而然會認為那麼中文部分應該正常,沒想到後來會踢到鐵板,而且 google 很久也找不出答案。

  遇到亂碼的案例很簡單,比如在 Button1OnClick 的事件上,寫下 Button1.Text := '中文',但在執行的時候,實際上 Button1.Text 上會顯示成亂碼,why why why?不是說 json 的資料傳過來一樣是丟到元件上顯示沒問題嗎?是,我也是這樣想,當時遇到的時候心中真是一個不瞭解...嘗試了很多編碼、解碼的作法,甚至直接給10進位的 Unicode,比如 Button1.Text := #20013#25991,但是結果依然不如預期,最後只好訴諸 Embarcadero 的 QualityCentral,想說這應該是一個 bug 吧,這也是 10 多年來第一次提報問題給官方的 QC 來處理。

  Embarcadero 的 QC 也不負所託,一來一往間的確解決了我踢到的鐵板,過程就不贅述了,直接說原因

  1.一個已知的 iOS simulator 問題

     iOS simulator 目前預設並不會以 UTF-8 的方式來執行,如果要 iOS simulator 以 UTF-8 的方式來執行,則必須在 Terminal 模式下指定,並且先將 iOS simulator 執行起來(而非透過 XCode)

  2.如果要新增一個 Form 在已存在的 Delphi 專案的時候,這個 New Form source code 的部分,預設存檔編碼方式是 Ansi,而非 UTF-8,這並非是 bug,只是我不知道 Delphi 還有這個功能罷了。

  在上述兩個原因都能排除的狀況下,是的,FireMonkey @ iOS 真的沒有中文的問題!

 

p.s.上述原因 1 中,iOS simulator 的解決方式,你可以在 Embarcadero QC 中我提報的 Report 中找到相關回答與過程,當然也有原因 2 的部分,請自行參閱,如果還有疑問歡迎交流。

  http://qc.embarcadero.com/wc/qcmain.aspx?d=101418

arrow
arrow

    縹緲 發表在 痞客邦 留言(3) 人氣()