Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python UnicodeDecodeError:';utf8';编解码器可以';在位置74处对字节0x80进行t解码:起始字节无效_Python_Byte_Hbase - Fatal编程技术网

Python UnicodeDecodeError:';utf8';编解码器可以';在位置74处对字节0x80进行t解码:起始字节无效

Python UnicodeDecodeError:';utf8';编解码器可以';在位置74处对字节0x80进行t解码:起始字节无效,python,byte,hbase,Python,Byte,Hbase,我在hbase中有一些数据存储为字节和字符串,由\x00填充分隔 因此,我的hbase中的行如下所示:- 00:00:00:00:00:00\x00\x80\x00\x00\x00U\xEF\xA0\xB00\x002\x0040.0.2.1\x00 该行(键)对应的值为100 行说明:- 00:00:00:00:00:00 - This is mac address and is a string \x80\x00\x00\x00U\xEF\xA0\xB00 - This is the t

我在hbase中有一些数据存储为字节和字符串,由\x00填充分隔

因此,我的hbase中的行如下所示:-

00:00:00:00:00:00\x00\x80\x00\x00\x00U\xEF\xA0\xB00\x002\x0040.0.2.1\x00
该行(键)对应的值为100

行说明:-

00:00:00:00:00:00 - This is mac address and is a string 
\x80\x00\x00\x00U\xEF\xA0\xB00 - This is the time which is saved as bytes
2 - this is customer id number stored as string
40.0.2.1 - this is store ID stored as string
我使用了starbase模块将python连接到它的stargate服务器

下面是我的代码片段,用于连接到starbase和hbase表,并尝试提取该行的值:-

from starbase import Connection
import starbase

C = Connection(host='10.10.5.2', port='60010')
get_table =  C.table('dummy_table')
mac_address = "00:00:00:00:00:00"
time_start = "\x80\x00\x00\x00U\xEF\xA0\xB00"
cus_id = "2"
store_id = "40.0.2.1"

create_query = "%s\x00%s\x00%s\x00%s\x00" % (mac,time_start,cus_id,store_id)

fetch_result = get_table.fetch(create_query)
print fetch_result
预期产出为:-

100
你不必担心星基连接和它的方法。如果所有内容都是字符串,它们就可以正常工作,但现在由于时间被转换为字节,它给了我一个错误:-

UnicodeDecodeError: 'utf8' codec can't decode byte 0x80 in position 74: invalid start byte
以防在我打印时需要查看create_查询的输出:-

00:00:1E:00:C8:36▒U▒v▒130.0.2.6

我非常感谢你的帮助。谢谢

我猜您的数据库不支持在这些字段中存储字节;也许您必须存储字符串

一种方法是在将字节存储到数据库之前将其转换为base64字符串。例如:

>>> from base64 import b64encode, b64decode
>>> b64encode("\x80\x00\x00\x00U\xEF\xA0\xB00")
'gAAAAFXvoLAw'
>>> b64decode(_)
'\x80\x00\x00\x00U\xef\xa0\xb00'

我猜想您的数据库不支持在这些字段中存储字节;也许您必须存储字符串

一种方法是在将字节存储到数据库之前将其转换为base64字符串。例如:

>>> from base64 import b64encode, b64decode
>>> b64encode("\x80\x00\x00\x00U\xEF\xA0\xB00")
'gAAAAFXvoLAw'
>>> b64decode(_)
'\x80\x00\x00\x00U\xef\xa0\xb00'
试试这个

time_start = "\\x80\\x00\\x00\\x00U\\xEF\\xA0\\xB00"
\x是十六进制值的转义序列

create_query = "%s\x00%s\x00%s\x00%s\x00" % (mac,time_start,cus_id,store_id)
正在将开始时间转换为字符串。因为x80不是有效的utf-8,所以它抛出了一个错误。

试试这个

time_start = "\\x80\\x00\\x00\\x00U\\xEF\\xA0\\xB00"
\x是十六进制值的转义序列

create_query = "%s\x00%s\x00%s\x00%s\x00" % (mac,time_start,cus_id,store_id)

正在将开始时间转换为字符串。由于x80不是有效的utf-8,它抛出了一个错误。

Hbase支持存储字节。事实上,在hbase中以字节存储数据比字符串扫描结果快得多。这就是在字符串上以字节形式存储数据的原因。@Ray,那么,错误发生在哪一行代码上?如果您正在打印原始字节,它是否会隐式转换为unicode?Hbase支持存储字节。事实上,在hbase中以字节存储数据比字符串扫描结果快得多。这就是在字符串上以字节形式存储数据的原因。@Ray,那么,错误发生在哪一行代码上?如果您正在打印原始字节,它是否会隐式转换为unicode?我尝试了您的建议,但不起作用。它没有给出任何错误,但没有给出任何结果。请尝试在“创建\u查询”中将所有\x00替换为\\x00。我尝试了您的建议,但没有效果。它没有给出任何错误,但没有给出任何结果。请尝试在create\u查询中将所有\x00替换为\\x00。