将单词转换为Unicode

时间:2017-08-26 14:32:36

标签: python python-3.x

有人可以向我解释这段代码吗?我真的不明白。

  1. 为什么我需要声明uniMessage = ""这里有什么用途?有时当我编码时,我意识到我需要事先声明它,但有时我不需要。

  2. 为什么我需要使用+=并将用户输入的字词转换为str?不是+=就像unicode = unicode + str(ord(char))一样吗?我没有看到+=的影响,为什么我不能使用=。如果我认为用户输入的消息已经是一个字符串?为什么我需要再次将其转换为str

  3. 此外,没有必要将convMessage += chr(int(alphabet))转换为整数isn'

    message = input("Enter a word ")
    
    uniMessage = ""
    for char in message:
        uniMessage += str(ord(char))
    print("Unicode message:", uniMessage)
    
    convMessage = ""
    for i in range(0, len(uniMessage)-1, 2):
        alphabet = uniMessage[i] + uniMessage[i+1]
        convMessage += chr(int(alphabet))
    print("Orginal message:", convMessage)
    

2 个答案:

答案 0 :(得分:0)

重要说明

代码不是真正的Unicode编码/解码,因为假设您输入的Unicode字符只有两位小数。如果输入data = sock.recv(1) 作为输入,则可以自己测试,这些字符包含100,101和102个ASCII代码。

需要

(1) def,因为您是第一次使用它作为赋值运算符的右侧部分。

uniMessage = ""

与“等效”:

uniMessage += str(ord(char))

在Python中,需要在使用之前声明变量,uniMessage = uniMessage + str(ord(char)) 运算符首先评估右操作符。

(2) =只是语法糖,所以是的,您可以使用+=,但是有些人会说它不那么pythonic和“更难”到阅读;)我建议尽可能使用=。您必须使用+=转换为字符串,因为您在使用str将用户输入转换为数字之前。 ord

(3)是必要的,因为ord是一个字符串,一个充满数字字符的字符串,但仍然是一个字符串。

答案 1 :(得分:0)

该代码可能打算将字符转换为内部数字表示并返回字符串。但是,对于换行(通常为0x0A = 10dec)以及" c"以下的8位编码字符,失败的代码只是 (0x63 = 99dec)。 除此之外,在Python中,每个字符串都是一个带有UTF-8编码的Unicode字符串。可以使用其他编码(str.encode()),然而,将产生"字节"