【问题标题】:About char b prefix in Python3.4.1 client connect to redis关于python3.4.1客户端连接redis中的char b前缀
【发布时间】:2025-12-07 21:20:02
【问题描述】:

我遇到了麻烦。我的代码在下面。但是我不知道为什么在输出字符串“Hello Python”之前有一个字符'b'。

>>> import redis
>>> redisClient = redis.StrictRedis(host='192.168.3.88',port=6379)
>>> redisClient.set('test_redis', 'Hello Python')
True
>>> value = redisClient.get('test_redis')
>>> print(value)
b'Hello Python' //why char 'b' output?

【问题讨论】:

    标签: python redis


    【解决方案1】:

    表示它是一个字节串

    你可以使用:

    redis.StrictRedis(host="localhost", port=6379, charset="utf-8", decode_responses=True)
    

    使用decode_responses=True 制作一个 unicode 字符串。

    【讨论】:

    • 请注意,这会阻止您在数据库中存储真正的二进制数据,因为它会被错误地视为 UTF8 编码的字符串
    • 奇怪的是decode_responsesthe docs 中没有被描述
    • @Eric 的定义是 class redis.StrictRedis(host='localhost', port=6379, db=0, password=None, socket_timeout=None, connection_pool=None, charset='utf-8', errors='strict', decode_responses=False, unix_socket_path=None)decode_responses=False 是默认值。
    • port=6379 参数有什么作用?
    • @CaptRisky,很明显。但是我为什么要关心正在使用哪个端口?当我省略这个参数时,它似乎工作正常?我检查了 redis-py 文档并没有找到任何关于此的内容。
    【解决方案2】:

    b'Hello Python' 是一个字节字符串 - redis 会在输入时为您自动编码一个 unicode 字符串,但在输出时解码它是您的工作。

    最好显式编码和解码:

    >>> redisClient.set('test_redis', 'Hello Python'.encode('utf-8'))
    >>> redisClient.get('test_redis').decode('utf-8')
    'Hello Python'
    

    【讨论】:

    • 非常感谢您这样做...但它是否会根据自己的意愿自动编码并且仅在您说出来时才解码在逻辑上是否正确..我的意思是似乎没有更多以自我偏见的方式完成工作。
    • @sidd.rc:python 3 的关键思想之一是编码/解码永远不会是自动的。这里的自动编码很糟糕,因为除非你知道使用了哪种编码,否则你无法解码。
    • @Eric 好的,谢谢你:),我自己是 python 新手。非常感谢您增加我的知识