如何将八进制字符串转换为字符?

3
所以我在尝试用 Python 登录 web-client wifi 登录页面。每次登录会话,web-client 都会生成特殊的八进制字符。所以我尝试做的是:

requests.get(web-client).text -> 通过循环文本索引获取八进制代码 -> 跟密码结合

问题是:

- 如果我写

password="password"
special="\340" + password + "\043\242\062\374\062\365\062\266\201\323\145\251\200\303\025\315"
print(special)

它返回 =

àpassword#¢2ü2õ2¶Óe©ÃÍ #这就是我想要的,Python 把它翻译成字符

- 但如果我索引网页

import requests
webtext= requests.get(web-client url).text
password= "password"
special1= ""
special2= ""
for i in range(3163, 3167): #range of the first octal
    special1 = special1+webtext[i]
for i in range(3204, 3268): #range of the second octal
    special2 = special2+webtext[i]
special=special1+password+special2
print(special)

它返回的是=

\340password\043\242\062\374\062\365\062\266\201\323\145\251\200\303\025\315

从你可以看到的内容来看,它并没有被解码为字符,Python 把它当作字符串处理了。那么我应该怎么做才能得到相同的结果呢?

顺便说一下,我是通过打开保存的网页 HTML 文本文件来模拟请求的。


八进制数超出了普通字符类型的范围。 - Dean Van Greunen
\340 不适合在 -127 到 128 的范围内,因此您需要尝试将所有内容转换为 Unicode。 - Dean Van Greunen
尝试使用 special = unicode(special, "utf-8") 进行转换。 - Dean Van Greunen
我应该导入哪个模块来使用“unicode”?我尝试了import unicode,但它没有任何作用。 - Ihsan Fajar Ramadhan
2个回答

2
这应该可以工作:
>>> def convert_oct_to_string( oct ) :
...     return ''.join([chr(int(i,8)) for i in oct.split('\\') if len(i) > 1])
... 
>>> convert_oct_to_string( "\\340" )
'\xe0'
>>> convert_oct_to_string( "\\043\\242\\062\\374\\062\\365\\062\\266\\201\\323\\145\\251\\200\\303\\025\\315" )
'#\xa22\xfc2\xf52\xb6\x81\xd3e\xa9\x80\xc3\x15\xcd'
>>>

这应该能回答下面的一些问题。
Python 2.7
>>> "\340"
'\xe0'

Python 3.4
>>> "\340"
'à'

为了避免不必要的疑惑,以下是Python3中的同样内容:

>>> def convert_oct_to_string( oct ) :
...     return ''.join([chr(int(i,8)) for i in oct.split('\\') if len(i) > 1])
... 
>>> convert_oct_to_string( "\\043\\242\\062\\374\\062\\365\\062\\266\\201\\323\\145\\251\\200\\303\\025\\315" )
'#¢2ü2õ2¶\x81Óe©\x80Ã\x15Í'

我想做的是从八进制中获取字符。 - Ihsan Fajar Ramadhan
@RamadhanFajarIhsan 我确实这样做了。 - lenik
如果我执行 >>> "\340",它会返回 à - Ihsan Fajar Ramadhan
@RamadhanFajarIhsan 不是的,请看上面。 - lenik
1
if len(i) 可以被替换为 if i - CristiFati
显示剩余2条评论

2
你可以尝试类似以下的方法:
my_string = "\\043\\242\\062\\374\\062\\365\\062\\266\\201\\323\\145\\251\\200\\303\\025\\315"
bytes(my_string, "utf-8").decode("unicode_escape")

它返回的是 Ã 而不是 à,它们不同对吧? - Ihsan Fajar Ramadhan
bytes("\\340", "utf-8").decode("unicode_escape") gives 'à' - Heike

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接