2013年11月30日 星期六

注音符號 Unicode 範圍

遇到一個情況,一個用 flash 寫的遊戲
發佈為 AIR for iOS 的應用程式
在 iPhone 上面,卻不能使用注音輸入中文字
但用手寫、拼音都可正常輸入

我看裡面的 code
在輸入欄位,設定了 restrict 屬性,用來限制使用者只能輸入中英文和數字
允許的字元範圍為
英文數字:aA-zZ0-9
中文字:\u4e00-\u9fa5

讓我想到,以前寫網頁,使用 autocomplete 的功能時
也遇過不同瀏覽器對"何時字有輸入"的處理,似乎不盡相同

所以我直覺是這個限制的影響
用 \u4e00-\u9fa5 這個關鍵字查了一下

後來在這邊看到
http://applelacutos.blogspot.tw/2013/01/textfield.html
"蘋果的系統判定字長時,是把還未完成的拼音也算進去的"

所以我想應該是 \u4e00-\u9fa5 這個範圍不包含注音符號
查了一下注音符號的 Unicode 範圍,請對方加入後,就可以正常使用注音輸入中文了

注音符號 Unicode 範圍,整理如下
ㄅㄆㄇ ~ ㄧㄨㄩ:\u3105-\u3129
二聲(ˊ):\u02CA
三聲(ˇ):\u02C7
四聲(ˊ):\u02CB
輕聲(˙):\u02D9

我不會寫 AS3,所以下面就用 JavaScript 正規表示式當測試範例
var pattern = /[\u3105-\u3129\u02CA\u02C7\u02CB\u02D9]/;
console.log(pattern.test("ㄅ")); // true


注音符號的 Unicode 參考:
http://zh.wikipedia.org/wiki/%E6%B3%A8%E9%9F%B3%E7%AC%A6%E8%99%9F
http://www.cos.url.tw/software/Data001.html

3 則留言:

  1. 換成win10後無法簡單打出ㄅㄆㄇㄈ,有了這個Unicode筆記真的幫了大忙!!謝謝~~

    回覆刪除
  2. 感謝,java 代碼

    String pattern = ".*[\u3105-\u3129\u02CA\u02C7\u02CB\u02D9]+.*";

    text = "中文ㄆㄇ字";
    boolean b1 = text.matches(pattern);
    System.out.println(text + "\t" + b1);

    text = "中ㄆ文ㄇ字";
    b1 = text.matches(pattern);
    System.out.println(text + "\t" + b1);

    text = "ㄆㄇ";
    b1 = text.matches(pattern);
    System.out.println(text + "\t" + b1);

    text = "中ˊ文";
    b1 = text.matches(pattern);
    System.out.println(text + "\t" + b1);

    text = "中文ˊ";
    b1 = text.matches(pattern);
    System.out.println(text + "\t" + b1);

    回覆刪除