在實際應用中我們難免遇到某些顯示位置最多只能顯示比如4個中文加1個英文,一共9個位元組的gbk編碼文字,但是我們文字是utf-8的,如果轉換gbk,擔心裡面有非gbk文字,那麼我們如何擷取來控制顯示字元個數呢?
思路是這樣子:首先文字用unicode表示,python中用u"漢字和english"表示;如果是字母或數字,計數寬度單位為1,否則計數2,這樣來判斷文字顯示寬度是否超標,如果超標,利用擷取函式,乙個乙個的往後擷取,直到顯示寬度越界了,回退乙個,擷取這麼多個unicode字元返回即可。
**如下:
#coding=utf-8
def is_chinese(uchar):
'''判斷乙個unicode是否是漢字'''
if uchar >= u'\u4e00' and uchar<=u'\u9fa5':
return true
return false
def is_number(uchar):
"""判斷乙個unicode是否是數字"""
if uchar >= u'\u0030' and uchar<=u'\u0039':
return true
return false
def is_alphabet(uchar):
"""判斷乙個unicode是否是英文本母"""
if (uchar >= u'\u0041' and uchar<=u'\u005a') \
or (uchar >= u'\u0061' and uchar<=u'\u007a'):
return true
return false
def is_other(uchar):
"""判斷是否非漢字,數字和英文本元"""
if not (is_chinese(uchar) or is_number(uchar) or is_alphabet(uchar)):
return true
return false
# gbk寬度可用於對齊,中文佔兩個字元位置
def gbkwordlen(u):
if is_number(u) or is_alphabet(u):
return 1
return 2
# 計算文字顯示寬度
def gbkwordslen(uw):
i = 0
for u in uw:
i += gbkwordlen(u)
return i
def trunc_word(uw, len):
l = 0
i = 1
for u in uw:
l += gbkwordlen(u)
if l > len:
return uw[:i-1]
i += 1
return uw
a = u"更新a至1209期"
print trunc_word(a, 6)
print gbkwordslen(a)
java判斷中文字串長度
話不多說,上 獲取字串的長度,如果有中文,則每個中文字元計為2位 param value 指定的字串 return 字串的長度 public static intlength string value else return valuelength 得到乙個字串的長度,顯示的長度,乙個漢字或日韓文長...
jquery 判斷中文字元的長度
方法一 使用正規表示式,如下 function getbytelen val else return len 方法二 使用字元unicode判斷 方法如下 function getbytelen val else return len function querytask var scantarge...
C 顯示純文字對齊封裝(控制顯示字型長度)
坑 使用者在寫多行的純文字上來了乙個對齊的 如下 原因 不同的字型下,中文,英文大寫,英文小寫,字元,尤其是空格。字型占用的長度是不一樣的,然後顯示出來就是亂的。然而客戶要求在不同的字型下要正確對齊。所以只能根據字型去算每個字元的畫素,然後使用空格對齊了。做了乙個封裝,但是要求輸入轉換為datata...