VBA - чтение файла побайтно в системе с азиатской локалью - PullRequest
1 голос
/ 04 марта 2010

Я пытаюсь преобразовать файл из двоичного в текст, просто заменив каждый символ шестнадцатеричным кодом. Например, символ «с» будет заменен на «63».

У меня есть код, который нормально работает в обычных системах, но он не работает на ПК, где мне нужно его использовать, так как в качестве локали по умолчанию установлен китайский.

Я использую следующие операторы для чтения байта -

ch$ = " "
Get #f%, , ch$

Я подозреваю, что есть проблема, когда я читаю файл побайтно, поскольку он пропускает определенные байты, потому что они образуют составные символы. Вероятно, он читает 2 байта, которые образуют азиатский символ как один байт. Таким образом, он формирует намного меньший файл, чем ожидаемый размер.

Как мне прочитать файл побайтно?

Полный код вставляется здесь: http://pastebin.com/kjpSnqzV

1 Ответ

2 голосов
/ 04 марта 2010

Ваше подозрение верно. Чтение VB-файла автоматически преобразует строки в Unicode из кодовой страницы по умолчанию на ПК. На азиатской кодовой странице некоторые символы представлены более чем одним байтом.

Я советую вам использовать переменную Byte вместо строки - это остановит использование VB слишком полезным.

Dim ch As Byte  
Get #f%, , ch  

Другая возможная проблема с исходным кодом состоит в том, что некоторые последовательности байтов недопустимы на азиатских кодовых страницах (они не представляют допустимые символы). Поэтому в вашем коде могут возникнуть ошибки для некоторых входных файлов, но, вероятно, вы хотите, чтобы он работал с любым файлом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...