Python实现字符串与字节之间的相互转换

时间:2022-05-28 17:50:06

本文旨在说明如何使用的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)