You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将带b前缀的unicode字符串转换为无b前缀的普通字符串?

问题:将带b前缀的Unicode字符串转换为普通字符串

从其他设备获取的数据如下:

foo = { "abc": "b'E3:DE'" }

这里的"b'E3:DE'"被识别为unicode类型,尝试使用encode、decode方法无法去除b前缀——因为b是字符串的一部分,并非真正的bytes类型标记。

测试代码及输出

测试代码:

foo = xxx.get("abc")
logger.info("1 foo type {0} against {1} isinstance(foo, unicode) {2}".format(type(foo), type(b''), isinstance(foo, unicode)))
logger.info("2 before anything {0}".format(foo))
foo1 = foo.encode("utf-8")
logger.info("3 after encode foo1 {0} type {1} upper {2}".format(foo1, type(foo1), foo1.upper()))
bar = foo.decode("utf-8")
logger.info("4 after decode bar {0} type {1} upper {2}".format(bar, type(bar), bar.upper()))

输出结果:

INFO|1 foo type <type 'unicode'> against <type 'str'> isinstance(foo, unicode) True
INFO|2 before anything b'E3:DE'
INFO|3 after encode foo b'E3:DE' type <type 'str'> upper B'E3:DE'
INFO|4 after decode foo b'E3:DE' type <type 'unicode'> upper B'E3:DE'

解决方案

方法1:使用ast.literal_eval(推荐)

这是Python内置的安全解析方法,能将字符串形式的bytes表示转换为真正的bytes对象,再解码为普通字符串:

import ast

foo = xxx.get("abc")
# 解析为bytes对象后解码
result = ast.literal_eval(foo).decode("utf-8")
print(result)  # 输出: E3:DE

优势:能处理格式规范的bytes字符串表示,比如B'E3:DE'(大写B)也能正确解析,兼容性更强。

方法2:字符串截取(简单直接)

如果能确定字符串格式固定为b'xxx'或B'xxx',可以直接截取中间内容:

foo = xxx.get("abc")
# 跳过开头的b'或B',去掉结尾的'
result = foo[2:-1]
print(result)  # 输出: E3:DE

注意:此方法依赖字符串格式完全符合预期,若格式有变动(比如使用双引号、缺少引号等)需要调整截取逻辑。


内容的提问来源于stack exchange,提问作者nathan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 15:25:19