似乎有两种不同的方法将字符串转换为字节,如TypeError的答案所示:'str'不支持缓冲区接口
哪种方法更好或更好Pythonic?或者只是个人喜好?
b = bytes(mystring, 'utf-8')
b = mystring.encode('utf-8')
显然,以下是有效的语法
my_string = b'The string'
我想知道:
b字在前面的字符串是什么意思?我在SO上找到了一个相关的问题,但是这个问题是关于PHP的,它表示b用于表示字符串是二进制的,而不是Unicode,这是代码与PHP版本兼容所需的代码<6 ,当迁移到PHP 6.我不认为这适用于Python.
我确实在Python网站上找到了关于使用相同语法的字符将字符串指定为Unicode的文档u.不幸的是,它没有提到该文档中任何地方的b字符.
而且,只是出于好奇,有没有比多符号b和u是做其他事情?
unicode标准中有足够的代码点,你需要4个字节来存储它们.这就是UTF-32编码所做的.然而,UTF-8编码通过使用称为"可变宽度编码"的东西以某种方式将这些压缩到更小的空间.
实际上,它设法在一个字节中代表US-ASCII的前127个字符,它看起来与真正的ASCII完全相同,因此您可以将许多ascii文本解释为UTF-8而不对其执行任何操作.干净的把戏.那么它是怎样工作的?
我将在这里提出并回答我自己的问题,因为我只是做了一些阅读以弄清楚它并且我认为它可能会节省其他人一些时间.如果我有一些错误,也许有人可以纠正我.
我看到使用pycurl的例子,但不能确定这是否可以使用?一些例子会有所帮助.谢谢.
我正在尝试使用pandas函数read_sas从SAS的.sas7bdat格式读取数据:
import pandas as pd
df = pd.read_sas('D:/input/houses.sas7bdat', format = 'sas7bdat')
df.head()
我在df数据框中有两种数据类型 - float64和object.我对float64数据类型完全满意,所以我可以自由地将它转换为int,string等.问题是对象数据类型,我可以在df dataframe中看到这样包裹:
b'Text'
或者像这样:
b'12345'
代替
Text
要么
12345
我不能将它分别转换为字符串或int或"普通"对象数据类型.此外,我不能使用切片或替换技术来使用b''.所以我无法使用具有对象数据类型的列.请告诉我如何摆脱b''.
我想将为 python3 编写的代码改编为 python2.7,同时这样做我因为这两个而出错
bytes(some_string, 'UTF-8') 和 str(some_string, 'UTF-8')
我的问题:
遵循正确的方法来适应 str(some_string, 'UTF-8')
a = str(some_string)
a = a.encode('UTF-8')
以及如何将 bytes(some_string, 'UTF-8') 适配到 python2.7,因为 python3 中引入了字节。
有人可以解释 Python 3 中字节类型的一般用途,或者举一些例子说明它比其他数据类型更受欢迎吗?我看到字节数组相对于字符串的优势在于它们的可变性,但是字节呢?到目前为止,我真正需要它的唯一情况是通过套接字发送和接收数据;还有别的吗?
代码固定在下面:
import tensorflow as tf
hello=tf.constant("hello,Python!")
sess=tf.Session()
print(sess.run(hello))

当前结果固定在下面:
“你好,Python!”
然后是截图
那么,我该怎么做才能去掉当前结果之前奇怪的“b”呢?
在python2中,我可以整天生成以字符串格式表示的这些十六进制字节
'\x00\xaa\xff'
>>>’00'.decode('hex') + 'aa'.decode('hex') + 'ff'.decode('hex')
>>>'\x00\xaa\xff'
同样,我可以在 python3 中做到这一点
>>> bytes.fromhex(’00’) + bytes.fromhex(‘aa’) + bytes.fromhex(‘ff’)
>>>b'\x00\xaa\xff'
根据py2->py3这里的变化
Python 3.0 使用文本和(二进制)数据的概念,而不是 Unicode 字符串和 8 位字符串。所有文本都是Unicode;但是编码后的 Unicode 表示为二进制数据。
所以 Py2 版本的输出是一个字符串,而 Py3 版本的输出是字节类型的二进制数据
但我真的需要一个字符串版本!
根据上述文档:
由于 str 和 bytes 类型不能混合使用,您必须始终在它们之间进行显式转换。使用 str.encode() 从 str 转到 bytes,使用 bytes.decode() 从 bytes 转到 str。您还可以分别使用 bytes(s, encoding=...) 和 str(b, encoding=...) 。
好的,现在我必须解码这个字节类型的二进制数据......
>>> b'\x00\xaa\xff'.decode()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xaa in …我正在为我的学校项目编程,上面有一个问题。这是我的代码:
def aes():
    #aes
    os.system('cls')
    print('1. Encrypt')
    print('2. Decrypt')
    c = input('Your choice:')
    if int(c) == 1:
        #cipher
        os.system('cls')
        print("Let's encrypt, alright")
        print('Input a text to be encrypted')
        text = input()
        f = open('plaintext.txt', 'w')
        f.write(text)
        f.close()
        BLOCK_SIZE = 32
        PADDING = '{'
        pad = lambda s: s + (BLOCK_SIZE - len(s) % BLOCK_SIZE) * PADDING
        EncodeAES = lambda c, s: base64.b64encode(c.encrypt(pad(s)))
        secret = os.urandom(BLOCK_SIZE)
        f = open('aeskey.txt', 'w')
        f.write(str(secret))
        f.close()
        f = open('plaintext.txt', 'r')
        privateInfo = f.read()
        f.close()
        cipher …python ×7
python-3.x ×4
string ×4
unicode ×2
utf-8 ×2
binary ×1
byte ×1
cryptography ×1
dataframe ×1
decode ×1
encode ×1
encoding ×1
image-upload ×1
multibyte ×1
object ×1
pandas ×1
pycrypto ×1
tensorflow ×1
tornado ×1
types ×1