zoukankan      html  css  js  c++  java
  • python截取中文字符串

    python的中文处理还是比较麻烦的,utf-8的字符串的长度是1-6个字符,一不小心就会从中截断,出现所谓的乱码。下面这个函数提供了,从一段utf-8编码的字符串中,截取固定长度的字串。ord(char)将字符转换称整数,根据utf-8的编码规则,确定每个utf-8的字占用几个字符,从而避免截断的情况。
    参数:
      string  :utf-8字符串,如果是别的字符编码,请先转换成utf-8(推荐所有字符串和文件都用utf-8格式的)
      length :字符数(注意不是中文字的个数)

    题外话:
    python的字符编码,有几个函数unicode(str,'charset'),str.decode('charset'),str.encode('charset')。
    举个例子,你要将gb2312转为gbk,如下
    str = unicode(str,'gb2312') #转为unicode
    str.encode('gbk')                #转为gbk

    实际上,linux系统中,你可以使用iconv -f gb2312 -t gbk sourcefile > targetfile来进行转换。

     

    [python] view plaincopy
     
    1. def subString(string,length):  
    2.     if length >= len(string):  
    3.     return string  
    4.     result = ''  
    5.     i = 0  
    6.     p = 0  
    7.     while True:  
    8.     ch = ord(string[i])  
    9.     #1111110x  
    10.     if ch >= 252:  
    11.         p = p + 6  
    12.     #111110xx  
    13.     elif ch >= 248:  
    14.         p = p + 5  
    15.     #11110xxx  
    16.     elif ch >= 240:  
    17.         p = p + 4  
    18.     #1110xxxx  
    19.     elif ch >= 224:  
    20.         p = p + 3  
    21.     #110xxxxx  
    22.     elif ch >= 192:  
    23.         p = p + 2  
    24.     else:  
    25.         p = p + 1     
    26.           
    27.     if p >= length:  
    28.         break;  
    29.     else:  
    30.         i = p  
    31.     return string[0:i]  

     

     

    后记:

    后来,我发现一种更为简单的方法

    str = '中国人'

    str.decode('utf-8')[0:1].encode('utf-8')

    先转换成unicode,再取子串,然后转换成utf-8

  • 相关阅读:
    给UILabel设置不同的字体和颜色
    通过btn获取所在cell
    常用网站
    如何设计一个 iOS 控件?(iOS 控件完全解析) (转)
    #Mac技巧#如何在Mac系统上新建TXT文档,以及打开txt文稿的乱码问题如何解决
    整理 iOS 9 适配中出现的坑(图文)(转)
    UISegmentedControl
    Xcode因为证书问题经常报的那些错
    iOS开发--UIDatePicker
    IOS开发中有用的第三方库
  • 原文地址:https://www.cnblogs.com/jouny/p/3633351.html
Copyright © 2011-2022 走看看