首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在python中获取与VB6中的整数值相同的字符

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

Stack Overflow用户
提问于 2019-02-04 17:58:55
回答 1查看 48关注 0票数 2

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

VB6:

代码语言:javascript
复制
Private Sub AddToBuffer(AddWert As Long)
    OutIndex = OutIndex + 1             
    Mid(Out_Buffer, OutIndex, 1) = Chr(AddWert) 
End Sub

Python:

代码语言:javascript
复制
 def addToBuffer(self, AddWert):     
    self.outIndex += 1                  
    self.outBuffer = self.outBuffer + chr(AddWert)
    return None
EN

回答 1

Stack Overflow用户

发布于 2019-02-04 18:50:07

我没有VB6,所以我猜不出你在那里看到的是什么字符:你说你得到了什么,但没有说你想要什么。

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

VB6为这些字符显示的任何字形都是非标准的,您可能必须自己翻译它们。在Unicode表中搜索字形,并将它们放入dict中。

对于128及以上的值(不管别人怎么告诉你,它在ASCII标准中都没有定义),我猜测(再一次) VB6会使用Windows1252,尽管可能不是在你的地区:你会比我更清楚这一点。

这段代码将转换Windows 1252映射中的值,这可能就是您要查找的值:

代码语言:javascript
复制
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为它们显示字形,则适用于0-31的相同备注。顺便说一句,160可能会产生一个空格或者什么都不产生:它不是。当然,这不容易看出来,但这是一个不间断的空格。

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

代码语言:javascript
复制
self.outBuffer = self.outBuffer + chr(AddWert)

您可以使用

代码语言:javascript
复制
self.outBuffer = self.outBuffer + bytes([AddWert]).decode("windows-1252")
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54513705

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档