本文旨在说明如何使用的Python对字符串中的字符进行编码和解码。
下面是一个最近做到的编程题,题目的详细叙述如下:
在GBK编码下,请编写一个截取字符串的函数, 输入为一个字符串和字节数,输出为按字节截取的字符串。 但是要保证汉字不被截半个,同时忽略字符串中的数字后输出最终结果。
输入描述:
一行字符串和待截取的字符串
输入描述:
单独一行截取的字符串
示范:
输入:
中zhong
4输出:
中zh
其中需要考察到字符串的编码和解码的知识。
GBK采用双字节表示,总体编码范围为 8140-FEFE 之间,首字节在 81-FE 之间,尾字节在 40-FE 之间。
掌握了上述的知识,就可以解决上面的问题。
python
中讲字符串转换为字节(以编码GBK编码为例):
string = bytes(input_string,encoding='gbk')
反过来将字节转换为字符串:
result = str(string, encoding='gbk')
具体的代码如下:
input_string = input()
input_num = input()
string = bytes(input_string,encoding='gbk')
s_len = int(input_num)
# print(len(string))
# print(string[:1])
if len(string) == 0 or s_len <= 0:
result = str(string, encoding='gbk')
# print(string.decode('gbk'))
elif len(string)==0 or s_len >= len(string):
result = str(string, encoding='gbk')
elif s_len < len(string):
len_num = 0
while len_num < s_len:
tmp_c = string[len_num]
# print(tmp_c)
if tmp_c > 32 and tmp_c <= 127:
len_num += 1
continue
tmp_nextc = string[len_num + 1]
if (tmp_c >= 161 and tmp_c <=255) or (tmp_nextc >= 128 and tmp_nextc<=255):
len_num += 2
continue
else:
len_num += 1
break
tmp = string[0:len_num]
result = str(tmp, encoding='gbk')
print(result)