机器人框架 - 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 。我现在越来越好奇了! 现在我限制使用特定字符 (é) 获取数据。我知道这是一种解决方法。这也大大减少了我的测试数据集,因为大部分数据都包含字符。但这就是我现在能想到的。 在python2.7 bytearray/bytestring的类型是'str'; unicode 字符串的类型为“unicode”;所以我的怀疑是正确的,让我们试着让它为你工作:)

以上是关于机器人框架 - UnicodeDecodeError:“ascii”编解码器无法解码位置 49 的字节 0xe9:输入文本时序数不在范围内(128)的主要内容,如果未能解决你的问题,请参考以下文章

开源qq机器人框架能一直用吗

以无头模式为机器人框架上传文件

如何使用机器人框架上传文件?

执行 javascript - 机器人框架

没有使用机器人框架安装边缘驱动程序

如何在机器人框架中传递默认的可变参数?