Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.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 比较unicode字符串和字节字符串_Python_Python 2.7_Unicode - Fatal编程技术网

Python 比较unicode字符串和字节字符串

Python 比较unicode字符串和字节字符串,python,python-2.7,unicode,Python,Python 2.7,Unicode,版本:Python 2.7 我从Unicode CSV文件中读取值并循环查找特定的产品代码-字符串。变量p来自CSV文件 sku = '1450' # sku can contain spaces. print p, '|', sku print p == '1450' print binascii.hexlify(p), '|', binascii.hexlify(sku) print binascii.hexlify(p) == binascii.hexlify(sk

版本:Python 2.7

我从Unicode CSV文件中读取值并循环查找特定的产品代码-字符串。变量p来自CSV文件

sku = '1450'             # sku can contain spaces.
print p, '|', sku
print p == '1450'
print binascii.hexlify(p), '|', binascii.hexlify(sku)
print binascii.hexlify(p) == binascii.hexlify(sku)
print 'repr(p): ', repr(p)
导致

1450 | 1450
False
003100340035003000 | 31343530
False
repr(p): '\x001\x004\x005\x000\x00'
问题1。对于版本3等,成功比较的未来验证方法是什么? 问题2。Unicode是little endian。为什么Unicode十六进制的两端都有00

注意:尝试转换为Unicode-u'1450'-似乎对输出没有任何影响


谢谢。

在Python3中,由于字符串处理方式的改变,这可能会容易得多

尝试使用指定的编码打开文件,并将该文件传递给csv库

导入csv 打开'some.csv',换行符=,将='UTF-16LE'编码为fh: reader=csv.readerph 对于读卡器中的行:读卡器是可编辑的 与世界其他地区合作 在一些注释之后,读取尝试来自FTP服务器。 将读取的字符串切换到或读取

现在有更多的上下文管理器

输入io 导入csv 从ftplib导入FTP FTPftp.example.org作为ftp: 使用io.BytesIO作为二进制缓冲区: 将所有products.csv读入二进制缓冲区 ftp.retrbinaryRETR products.csv,二进制缓冲区.write 二进制缓冲区.seek0倒带文件指针 创建一个文本包装器,将编码与用于读取的文件相关联 使用io.TextIOWrapperbinary_缓冲区,将=UTF-16LE编码为csv_字符串: 对于csv.readercsv_字符串中的行: 与世界其他地区合作
这在Python3中可能要容易得多,因为处理字符串的方式发生了变化

尝试使用指定的编码打开文件,并将该文件传递给csv库

导入csv 打开'some.csv',换行符=,将='UTF-16LE'编码为fh: reader=csv.readerph 对于读卡器中的行:读卡器是可编辑的 与世界其他地区合作 在一些注释之后,读取尝试来自FTP服务器。 将读取的字符串切换到或读取

现在有更多的上下文管理器

输入io 导入csv 从ftplib导入FTP FTPftp.example.org作为ftp: 使用io.BytesIO作为二进制缓冲区: 将所有products.csv读入二进制缓冲区 ftp.retrbinaryRETR products.csv,二进制缓冲区.write 二进制缓冲区.seek0倒带文件指针 创建一个文本包装器,将编码与用于读取的文件相关联 使用io.TextIOWrapperbinary_缓冲区,将=UTF-16LE编码为csv_字符串: 对于csv.readercsv_字符串中的行: 与世界其他地区合作
当您向我们展示的都是ASCII数字时,为什么还要提到Unicode?当你说一个Unicode文件时,你还应该说哪个Unicode编码。@WalterTross Python字符串是Unicode的,即使所有字符都是ASCII。print reprp的输出是什么?显示字符串的实际内容,而不是打印时调用str时从str获得的用户友好版本。在本例中,repr向我们显示,每个数字之间都有空字节\x00,这是UTF-16编码的强烈指示,正如Walter Tross在现已删除的注释中所观察到的。考虑到您对未来可靠方法的担忧,你为什么要用Python 2编程?当你向我们展示的都是ASCII数字时,为什么还要提到Unicode?当你说一个Unicode文件时,你还应该说哪个Unicode编码。@WalterTross Python字符串是Unicode的,即使所有字符都是ASCII。print reprp的输出是什么?显示字符串的实际内容,而不是打印时调用str时从str获得的用户友好版本。在本例中,repr向我们展示了每个数字之间都有空字节\x00,这是UTF-16编码的有力标志,正如Walter Tross在一条现已删除的评论中所观察到的。考虑到您对一种经得起未来考验的方法的担忧,您为什么要用Python 2编程?@WalterTross我也这么认为+LE;更新!你怎么知道这是小恩迪安而不是大恩迪安?由于每个字节都是零,因此无法知道,尤其是当上一个/下一个字符串的前导/尾随字节也包括在内时。@markransem在问题中说明@MarkRansom:我正在通过FTP从工业HMI读取CSV文件。HMI用户手册声明数据为little-endian。谢谢。这给了我足够的线索来解决这个问题。还有一些细节我不想麻烦你。由于2.7没有退出方法,我在with FTP行上得到了一个属性错误。看看帮助我解决这个问题的答案。@WalterTross我也这么认为+LE;更新!你怎么知道这是小恩迪安而不是大恩迪安?由于每个字节都是零,因此无法知道,尤其是当上一个/下一个字符串的前导/尾随字节也包括在内时。@markransem在问题中说明@MarkRansom:我正在通过FTP读取CSV文件
从工业人机界面。HMI用户手册声明数据为little-endian。谢谢。这给了我足够的线索来解决这个问题。还有一些细节我不想麻烦你。由于2.7没有退出方法,我在with FTP行上得到了一个属性错误。请参阅帮助我解决此问题的答案。