У меня нет VB6, поэтому я не могу угадать, какие символы вы видите там: вы сказали, что вы получаете , но не то, что вы ожидаете .
ASCII 0-31 являются управляющими символами: они не печатаются, другими словами, у них нет глифа.Например, 13 - это возврат каретки, а 10 - перевод строки.
Какой бы символ VB6 для них ни отображался, он нестандартный, и вам, вероятно, придется его переводить самостоятельно.Выследите глифы в таблице Unicode и поместите их в dict
.
Для значений 128 и выше (которые, как кто-нибудь вам скажет, равны undefined в стандарте 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, которые, по-видимому, не имеют сопоставлений даже в Windows 1252. Если VB6 отображает глифыдля них применяются те же замечания, что и для 0-31.Как примечание стороны, может показаться, что 160 дает пустой или ничего: это не так.Конечно, это не так просто увидеть, но это неразрывный пробел.
Итак, для символов старше 31 вместо
self.outBuffer = self.outBuffer + chr(AddWert)
вы можете использовать
self.outBuffer = self.outBuffer + bytes([AddWert]).decode("windows-1252")