在python中获取与VB6中相同的整型值字符

在python中获取与VB6中相同的整型值字符,python,vb6,i2c,Python,Vb6,I2c,我正在将VB6代码迁移到Python,其中包括创建ftd2x.dll包装器。我用了一些例子来创建这个。 DLL写函数的数据必须是字符串。我遇到的问题是,对于某些字符,Python和VB6具有不同的符号,因此,它将错误的数据写入设备。如何在Python中获得与VB6中的chr()函数相同的字符 VB6: Python: def addToBuffer(self, AddWert): self.outIndex += 1 self.ou

我正在将VB6代码迁移到Python,其中包括创建ftd2x.dll包装器。我用了一些例子来创建这个。 DLL写函数的数据必须是字符串。我遇到的问题是,对于某些字符,Python和VB6具有不同的符号,因此,它将错误的数据写入设备。如何在Python中获得与VB6中的chr()函数相同的字符

VB6:

Python:

 def addToBuffer(self, AddWert):     
    self.outIndex += 1                  
    self.outBuffer = self.outBuffer + chr(AddWert)
    return None

我没有VB6,所以我猜不出你在那里看到了什么角色:你说的是你得到的,但不是你期望的

ASCII 0-31是控制字符:它们是非打印字符,换句话说,它们没有字形。例如,13是回车符,10是换行符

VB6显示的任何符号都是非标准的,您可能需要自己翻译它们。在Unicode表中查找字形,并将其放入
目录中

对于128及以上的值(无论任何人告诉您什么,在ASCII标准中都没有定义),我(再次)猜测VB6将使用Windows 1252,尽管可能不在您的区域设置中:您会比我更清楚这一点

这段代码将转换作为Windows 1252映射一部分的值,这可能是您正在寻找的:

for i in range(32, 256):
    try:
        print (i, bytes([i]).decode("windows-1252"))
    except UnicodeDecodeError:
        print (i, 'Not decodable')
除了127(也是一个控制字符)和129、141、143、144和157(即使在Windows1252中也似乎没有映射)之外,这将为您提供我认为您所期望的。如果VB6为它们显示图示符,则适用于0-31的相同注释。作为旁注,160可能会产生一个空白或什么也没有:它不会。当然,这不容易看到,但这是一个不间断的空间

因此,对于31以上的字符,而不是

self.outBuffer = self.outBuffer + chr(AddWert)
你可以用

self.outBuffer = self.outBuffer + bytes([AddWert]).decode("windows-1252")

有些角色不足以继续下去。你能解释一下是哪些吗?几乎可以肯定这是一个字符串/Unicode问题,但是很难用这么少的细节来具体说明错误的字符:1到31,127到159。数字1到31不返回任何内容,127到159返回问号。我还认为这是一个unicode问题,但我找不到unicodedata.normalize()的修复方法。我之所以投票支持这个方法,是因为我认为这是您需要的好的、有用的信息。但我认为书面问题可以说得更清楚(正如其他评论中已经指出的那样)
self.outBuffer = self.outBuffer + bytes([AddWert]).decode("windows-1252")