【问题标题】:How to change octal string to char?如何将八进制字符串更改为char?
【发布时间】:2020-01-14 09:05:50
【问题描述】:

所以我正在尝试使用 python 登录网络客户端 wifi 登录页面。网络客户端不断为每个登录会话生成特殊的八进制字符。所以我想做的是:

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

问题是:

-如果我写

密码="密码" special="\340" + 密码 + "\043\242\062\374\062\365\062\266\201\323\145\251\200\303\025\315" 打印(特殊)

它返回 =

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

-但如果我索引网页

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 的已保存文本文件来模拟请求

【问题讨论】:

  • 八进制超出了正常字符类型的范围。
  • \340 不适合 -127 到 128 的范围,因此您需要尝试将所有这些转换为 unicode
  • 试试special = unicode(special, "utf-8")
  • 我应该导入什么模块来使用'unicode'?我做了import unicode,但它什么也没做
  • 请点赞帮助

标签: python python-3.x char octal


【解决方案1】:

这应该可行:

>>> 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Í'

【讨论】:

  • 我想做的是从 oct 中获取字符
  • @RamadhanFajarIhsan 正是我所做的。
  • 如果我这样做 >>> "\340" 它返回 à
  • @RamadhanFajarIhsan 不,见上文。
  • if len(i) 可以替换为 if i
【解决方案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")

【讨论】:

  • 它返回 Ã 而不是 à,它们是不同的,不是吗?
  • bytes("\\340", "utf-8").decode("unicode_escape")'à'
猜你喜欢
  • 2015-04-24
  • 2021-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-23
  • 1970-01-01
  • 2015-11-08
  • 1970-01-01
相关资源
最近更新 更多