日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

android 4.4 生僻字,Android上显示生僻字的方法

發布時間:2023/12/10 Android 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android 4.4 生僻字,Android上显示生僻字的方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

安卓5.0+是可以顯示所有(8萬多個)Unicode漢字的,本文介紹顯示生僻漢字的方法,這個方法也適用于其它特殊字符。

Unicode值在0xFFFF以下的(2萬多個簡體、繁體)漢字早已被廣泛支持,所以本文不把它們看作生僻字。

本文說的生僻字是指Unicode值在0xFFFF以上的漢字,這個范圍也叫non-BMP。

可以看這篇文章了解漢字的大致分布。

主要有4個關鍵點:

一、需使用Android 5.0以上系統。

經過我的測試,在Android 4.3.1模擬器、4.4.2模擬器上會出現問題,而在Android 5.0.2模擬器、6.0真機、7.0模擬器上正常。

問題見本文最后部分的兩張截圖:附1、附2。

二、確保字符集能覆蓋生僻字。

也就是在文件、數據庫保存字符串時使用的字符集,應該是:GB18030、UTF-8、UTF-16、UTF-32等能支持所有Unicode字符的字符集。

注意a:不要使用GB2312、GBK或BIG5字符集,它們的范圍有限,都不支持生僻字(Unicode值大于0xFFFF)。

注意b:不要在Android程序的配置xml文件里寫生僻字,Android在用UTF-8解碼這些xml時,支持的范圍并不完整。這個bug在Android 6.0里被修復。見此帖。

按如下方法把字符串讀入String后,我們進入下一個關鍵點。

byte[] b = read_bytes_from_somewhere();

String str = new String(b, "GB18030");

三、String在處理生僻字時會使用surrogate對。

Java的String使用的是UTF-16編碼。String的一個char占兩個字節,能表示0~0xFFFF之間的數值范圍。

于是,根據UTF-16的規則,在String里:常用字符(Unicode值小于等于0xFFFF)用一個char表示;剩下的字符(Unicode值大于0xFFFF)用兩個char組合表示,這兩個char叫surrogate對兒。所以我們的生僻字符須要用兩個char組合表示。

surrogate對的原理是:兩個char各有一個保留區域,這個保留區域有1,024個位置,于是1,024x1,024等于1,048,576,再加上單個char包含的字符,正好能覆蓋Unicode所有的1,114,112個位置點。

在這里,搞清楚兩個概念就可以了:

char,一個char就是一個兩字節整數。它是String的最小單位,一個String包含0個或若干個char。String對象的length()函數返回的就是char的個數。

code point,一個code point就是一個Unicode字符,一個實際的字符。在String里,它可能用1個char表示,也可能用2個char組合表示,沒有第三種可能。

所以,在處理生僻字時,String的length()函數的返回值可能大于實際字符數,想知道String的實際字符數可以用codePointCount()函數。同理,charAt()等基于char操作的函數可能也不再適用。

四、使用支持生僻字的字體。

就算程序內在支持生僻字,字體不支持也顯示不出來。包括默認字體在內的很多字體都不支持生僻字。

我們可以找一個支持生僻字的字體,然后放到程序的資源目錄里,指定程序使用它而不是系統的默認字體。

先找一個支持生僻字的字體,比如這個開心宋體:帖子,網盤。

然后按以下方法使用該字體就可以了(出處):

//得到TextView控件對象

TextView textView = (TextView) findViewById(R.id.custom);

//將字體文件保存在assets/fonts/目錄下,創建Typeface對象

Typeface typeFace = Typeface.createFromAsset(getAssets(), "fonts/KaiXinSong.ttf");

//使用字體

textView.setTypeface(typeFace);

注意a:打包了字體的程序會大很多,這也是沒有辦法的事。除非做成按需下載字體,這就依賴網絡了;或者生成一個只包含所需漢字的字體文件。(2017年發布的Android Support Library v26增強了對字體的支持,見此視頻。)

注意b:各字體可能會有自己的側重點,比如支持生僻漢字的字體可能不支持emoji,支持emoji的字體可能不支持生僻漢字。

注意c:可以用SpannableString為一個字符串的部分字符使用指定的字體,見為部分字符指定字體、在SpannableString使用指定字體。

在按如上方法使用了開心宋體后,已經可以在Android 5.0.2模擬器上顯示各區漢字:

在Android 5.0.2模擬器上默認字體的效果,可以看到CJK統一漢字擴展B、C、D、E區的漢字都無法顯示:

附1,在Android 4.4.2模擬器上,使用開心宋體后,常用字反倒顯示不出來了。

在4.3.1、4.4.2上,使用Simsun-ExtB字體也有類似情況,所以這應該是安卓4.x的問題。

難道是系統不支持多于65536個字符的字體?我沒有去驗證,僅僅是猜測。

附2,在Android 4.4.2模擬器上,使用默認字體的效果:

關于Unity程序在IOS和Android上顯示內嵌網頁的方式

近期因為有須要在Unity程序執行在ios或android手機上顯示內嵌網頁.所以遍從網上搜集了一下相關的資料.整理例如以下: UnityWebCore 從搜索中先看到了這個.下載下來了以后發現這個的 ...

JS文件中的中文在網頁上顯示為亂碼解決方法

轉自:http://www.pc6.com/infoview/Article_63835.html 如果JS文件中的中文在網頁上顯示為亂碼,不妨采用本文章中的方法來試一試,或許能解決使你很頭疼的問題. ...

HTML讓文字在圖片上顯示的幾種方法

第一種方式是image 作為背景圖片,即:background:url("......."); 第二種方式是將img塊與文字塊(文字塊采用span標簽顯示)放在同一個div 中,然 ...

日期在蘋果手機上顯示NaN的處理方法

注意兩點即可: 1.蘋果只認識 yyyy/mmmm/dddd/ ?這類格式的日期 2.如果輸出后還要進行處理日期對比,蘋果默認會帶中文字,如:年月日,需要轉成上面1當中的日期格式在轉時間戳進行比較 G ...

在遠程X server上顯示圖形的設置方法

1.在服務器的/etc/ssh/sshd_config中,設置X11Forwarding yes,然后重啟ssh服務,cd /etc/init.d這個目錄下執行 ./ssh restart 2.在客戶 ...

unity,將camera設為don't clear在android上會顯示不正常

將camera設置為don't clear,在pc和ios上顯示沒問題,但在android上顯示不正常,改為only depth可以.

教你用PS制作雨天窗戶上透明水滴字

雨天窗戶上透明水滴字制作方法很簡單,主要利用圖層樣式來實現.學習后可以讓你對圖層樣式有更好的了解,認識. 先看下完成后的效果圖: 步驟1: 在Photoshop中我們新建或Ctrl+N,創建1920x ...

利用SQLite在android上實現增刪改查

利用SQLite在android上實現增刪改查 方法: 一.直接利用database.execSQL()方法輸入完整sql語句進行操作 這種方法適用于復雜的sql語句,比如多表查詢等等 這里適合于增刪 ...

Android上的MVP:如何組織顯示層的內容

MVP(Model View Presenter)模式是著名的MVC(Model View Controller)模式的一個演化版本,目前它在Android應用開發中越來越重要了,大家也都在討論關于M ...

隨機推薦

Bash 里的轉義序列

在 Bash 里,一共有五個地方支持反斜杠開頭的轉義序列,包括兩個內部命令 echo 和 printf 的參數里,字符串語法 $'...' 里,還有四個提示符變量 PS1-PS4 里,以及在 Read ...

CSS 去除列表項li前面的小圓點

前言 在默認的情況下,瀏覽器會在

標簽前面加上小圓點形成列表項,如下所示使用
  • 項1 項2 項3 或者使用
  • 項1 項2 項3 這在有時候確實給我 ...
  • CheckBox的觸發

    遇到的問題:當Checkbox選中時觸發Checked事件,使界面處于狀態1,但是頁面狀態2時也希望checkBox處于選中狀態,但是直接修改它的IsChecked屬性勢必會觸發他的Checked事件 ...

    Clementine 12.0 的使用安裝(數據挖掘)

    1.下載[統計數據挖掘工具].TLF-SOFT-SPSS_Clementine_v12.0-CYGiSO.bin 2.下載虛擬光驅安裝軟件 本人使用的是DTLite4402-0131. 3.如果需要漢 ...

    ASP.NET WEB API構建基于REST風格

    總結

    以上是生活随笔為你收集整理的android 4.4 生僻字,Android上显示生僻字的方法的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。