机器人框架 - UnicodeDecodeError:“ascii”编解码器无法解码位置 49 的字节 0xe9:输入文本时序数不在范围内(128)
Posted
技术标签:
【中文标题】机器人框架 - UnicodeDecodeError:“ascii”编解码器无法解码位置 49 的字节 0xe9:输入文本时序数不在范围内(128)【英文标题】:Robot framework - UnicodeDecodeError: 'ascii' codec can't decode byte 0xe9 in position 49: ordinal not in range(128) while inputting text 【发布时间】:2019-07-14 23:09:19 【问题描述】:我正在从数据库中查询值以使用 selenium 在输入字段中输入。但是,对于某些值,我收到以下错误:
UnicodeDecodeError: 'ascii' 编解码器无法在位置解码字节 0xe9 49:序数不在范围内(128)
当要在文本字段中输入的值类似于 'Décor' 时,我收到错误消息。我了解字符 "é" 的问题。我该如何克服这个错误?
机器人代码:
*** Settings ***
Library SeleniumLibrary
Library DatabaseLibrary
*** Test cases ***
Test
$value Get value from database
Input text $locator $value
*** Keywords ***
Get value from database
$queryResults Query $query
[Return] $queryResults
注意:该错误具体发生在将文本输入字段时(步骤2)。将相同的值记录到控制台可以正常工作。
【问题讨论】:
@DebanjanB - 我确实浏览了你提到的问题中的答案,但我找不到我的问题的解决方案。当我将 'D\xe9cor' 转换为原始字符串时,它会按原样输入到输入文本中。但我想输入“装饰”。问题是数据库中的值作为 'D\xe9cor' 保存在元组中。\xe9
是 é
(u'\xe9'
) 编码为 cp1252 或 latin-1。
@snakecharmerb - 是的。我的问题是,如何将值设为 ''é" 而不是 "\xe9"?
【参考方案1】:
这是 py2 我怀疑是你使用的变量的实际类型 (value
);它可能是一个以编码形式包含高 ascii 字符的字节串。
在Input Text
中使用之前,将其转换为unicode:
$value= Decode Bytes To String $value
如果失败 - 或者没有产生预期的结果,请尝试使用Convert To String
:
$value= Convert To String $value
我怀疑后者虽然会以编码形式保留“违规”字符,例如“D\xe9cor”。请在 cmets 中告诉我,我很好奇 :)
【讨论】:
使用设置为 UTF-8 的编码进行解码返回错误 UnicodeDecodeError: 'utf8' codec can't decode byte 0xe9 in position 36: invalid continuation byte。并且“转换为字符串”将其转换为原始字符串。与问题 cmets 中提到的行为相同。value
的类型是什么?运行这个——$the type= Evaluate type($value)
——注意变量周围没有大括号,然后是Log To Console $the type
。
以上是关于机器人框架 - UnicodeDecodeError:“ascii”编解码器无法解码位置 49 的字节 0xe9:输入文本时序数不在范围内(128)的主要内容,如果未能解决你的问题,请参考以下文章