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

2024-05-29 07:32:26 发布

您现在位置:Python中文网/ 问答频道 /正文

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

VB6版本:

Private Sub AddToBuffer(AddWert As Long)
    OutIndex = OutIndex + 1             
    Mid(Out_Buffer, OutIndex, 1) = Chr(AddWert) 
End Sub

Python:

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

Tags: 数据函数代码self字符例子dllsub
1条回答
网友
1楼 · 发布于 2024-05-29 07:32:26

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

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

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

对于128及以上的值(不管别人怎么说,在ASCII标准中,未定义),我(再次)猜测VB6将使用windows1252,尽管在您的语言环境中可能没有:您会比我更清楚这一点

这段代码将转换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,这似乎没有映射,即使在Windows 1252。如果VB6显示glyphs为他们然后相同的备注适用于0-31。作为一个旁注,它可能会出现160产生一个空白或没有:它没有。当然,这并不容易看到,但这是一个不间断的空间

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

self.outBuffer = self.outBuffer + chr(AddWert)

你可以用

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

相关问题 更多 >

    热门问题