python中文字符串的处理

本文通过实例演示了Python中不同字符编码之间的转换过程,特别是从gb2312到UTF-8的转换,并解释了Unicode作为两种编码间桥梁的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

python中直接将一个中文字符串赋值给一个变量使用的是utf-8格式的编码,以下为证:

>>> teststr = '我的eclipse不能正确的解码gbk码!'
>>> teststr
'/xe6/x88/x91/xe7/x9a/x84eclipse/xe4/xb8/x8d/xe8/x83/xbd/xe6/xad/xa3/xe7/xa1/xae/xe7/x9a/x84/xe8/xa7/xa3/xe7/xa0/x81gbk/xe7/xa0/x81/xef/xbc/x81'
>>> tests2 = u'我的eclipse不能正确的解码gbk码!'

>>> test3 = tests2.encode('gb2312')
>>> test3
'/xce/xd2/xb5/xc4eclipse/xb2/xbb/xc4/xdc/xd5/xfd/xc8/xb7/xb5/xc4/xbd/xe2/xc2/xebgbk/xc2/xeb/xa3/xa1'

>>> test3
'/xce/xd2/xb5/xc4eclipse/xb2/xbb/xc4/xdc/xd5/xfd/xc8/xb7/xb5/xc4/xbd/xe2/xc2/xebgbk/xc2/xeb/xa3/xa1'
>>> teststr
'/xe6/x88/x91/xe7/x9a/x84eclipse/xe4/xb8/x8d/xe8/x83/xbd/xe6/xad/xa3/xe7/xa1/xae/xe7/x9a/x84/xe8/xa7/xa3/xe7/xa0/x81gbk/xe7/xa0/x81/xef/xbc/x81'
>>> test3.decode('gb2312').encode('utf-8')
'/xe6/x88/x91/xe7/x9a/x84eclipse/xe4/xb8/x8d/xe8/x83/xbd/xe6/xad/xa3/xe7/xa1/xae/xe7/x9a/x84/xe8/xa7/xa3/xe7/xa0/x81gbk/xe7/xa0/x81/xef/xbc/x81'

>>> test3.decode('gb2312').encode('utf-8') == teststr
True

 

如上所见,test3变量(gb2312编码)经过解码(变成unicode字符串)后再使用utf-8编码,就成了与teststr值相同的串了.

通过上面的例子我们也发现,unicode字符串是gb2312字符串(windows就使用这种格式)与utf-8字符串(python本身使用)之间的一座桥梁.

### Python 中文字符串处理常见面试题及解答 #### 字符串编码与解码 在Python中,处理中文字符时经常遇到的一个问题是字符编码。Python 3默认使用UTF-8编码,这使得处理多字节字符(如汉字)更加方便。 对于不同版本的Python,在读取文件或网络数据流中的中文字符时,可能需要显式指定编码方式: ```python with open('chinese_text.txt', 'r', encoding='utf-8') as f: content = f.read() print(content) ``` 如果忽略`encoding`参数而源文件不是ASCII,则可能会抛出UnicodeDecodeError异常[^1]。 #### 处理全角半角转换 有时会涉及到将输入框内的用户输入由全角转成半角以便后续统一化处理。这里给出一个简单的例子展示如何完成此功能: ```python def full_to_half(text): result = "" for uchar in text: inside_code=ord(uchar) if inside_code==0x3000: # 全角空格直接转换 inside_code=0x20 elif (inside_code>=0xFF01 and inside_code<=0xFF5E): # 全角符号变半角 inside_code-=0xFEE0 result += chr(inside_code) return result s=" !@#¥%……&*()——+" print(full_to_half(s)) # 输出:" !@#$%...&*()-+ " ``` #### 计算字符串长度 由于中文字符占用两个甚至更多字节的空间,因此计算含有中文字符的字符串的实际显示宽度变得尤为重要。可以利用unicodedata模块获取每个字符的具体类别并据此判断其占据空间数: ```python import unicodedata def str_width(string): length = 0 for char in string: if unicodedata.east_asian_width(char) in ['F','W']: length+=2 else: length+=1 return length test_str = "你好 world!" print(str_width(test_str)) # 结果取决于具体环境设置,通常为7或9 ``` #### 文本对齐操作 当涉及表格布局或者格式化输出的时候,文本对齐是一个常见的需求。str类提供了ljust(), rjust() 和 center() 方法用于左对齐、右对齐以及居中对齐。需要注意的是这些方法默认按照单个英文字符作为单位进行填充,所以在处理包含中文的情况下应该考虑实际视觉效果上的差异。 ```python text = "测试" width = 10 padding_char = '*' left_aligned = text.ljust(width, padding_char) right_aligned = text.rjust(width, padding_char) centered = text.center(width, padding_char) print(f"'{left_aligned}'") # '测试*******' print(f"'{right_aligned}'") # '*******测试' print(f"'{centered}'") # '**测试****' ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值