Что нового

[Данные, строки] Преобразование кодировки ISO-8859-1 в Windows-1251

man_without_face

Новичок
Сообщения
17
Репутация
0
Всем здравствуйте!
Со сканера штрих-кода, при чтении pdf417, содержащего кириллицу, на выходе имею текст в кодировке ISO-8859-1. Сторонними способами (онлайн декодирование, программы типа "Штирлиц", сменить кодировку можно. Но на целевом объекте, данные методы недоступны.
Для вноса этих данных в базу, данная кодировка не подходит. Можно ли сменить её средствами autoit? На входе имеем либо текстовый файл, сохраненный в юникоде или utf-8 через стандартный блокнот, либо эти данные в буфере обмена. На выходе нужен текстовый файл, читаемый в Windows.
Спасибо!
 

Вложения

  • example.txt
    562 байт · Просмотры: 4

Naisho

Знающий
Сообщения
86
Репутация
12
Обратите внимание на функции:
Код:
_WinAPI_MultiByteToWideChar
_WinAPI_WideCharToMultiByte
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
В вашем случае можно использовать замечательную UDF от CreatoR и др. Encoding.au3.
Строку расшифровывает функция "_Encoding_UTF8BOMDecode", правда на 99% - нет Букв Ёё,Ч,Ъъ,Я
Вот пример, пробуйте
Код:
#include <Encoding.au3>

$hFile = FileOpen(@ScriptDir & '\example.txt', 0)
If $hFile = -1 Then
	MsgBox(4096, "Ошибка", "Невозможно открыть файл.")
	Exit
EndIf
$sLine = FileReadLine($hFile, 4)
MsgBox(0, 'Результат', _Encoding_UTF8BOMDecode($sLine))

FileClose($hFile)
Чуть дописал в функции "_Encoding_UTF8BOMDecode" строки, теперь всё раскодирует корректно .
Замените эти две строки в функции "_Encoding_UTF8BOMDecode" в UDF Encoding.au3 :
Код:
Local $sDecodeStr = BinaryToString('0xC3A0C3A1C3A2C3A3C3A4C3A5C3A6C3A7C3A8C3A9C3AAC3ABC3ACC3ADC3AEC3AFC3B0C3B1C3B2C3B3C3B4C3B5C3B6C3B7C3B8C3B9C3BCC3BBC3BDC3BEC3BFC39FC2A8C2B8C397C39A', 4)
	Local $sEncodeStr = 'абвгдежзийклмнопрстуфхцчшщьыэюяЯЁёЧъ'


Во вложении UDF "Encoding.au3" уже с исправленными строками
 

Вложения

  • Encoding.au3
    24 КБ · Просмотры: 14
Автор
M

man_without_face

Новичок
Сообщения
17
Репутация
0
Спасибо, получилось. Пришлось немного помучаться, оказывается функция некорректно работает, если в тексте есть символы разрыва строки. Но т.к. текст все равно обрабатывается дальше, просто убрал все @CRLF из считанного файла.
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
функция некорректно работает, если в тексте есть символы разрыва строки.
Уберите все возвраты каретки функцией
Код:
StringStripCR()
 
Верх