Измените код однострочного символа с помощью Notepad++ и PythonScript

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

<App_Data App="x" Name="Medium" Value="Forjado e apoiado pela máquina de propaganda, foi o mito do profeta que tinha aparentemente vindo do nada para fazer história. A verdadeira história de sua família não tinha lugar nesta imagem..." />
<App_Data App="x" Name="Short" Value="Forjado e apoiado pela máquina de propaganda, foi o mito do profeta que tinha aparentemente vindo do nada para fazer história. A verdadeira história de sua família não tinha lugar nesta imagem..." />

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

Я придумал только приведенный ниже сценарий, который на самом деле представляет собой лоскутное одеяло из кодов из Интернета...

texto = editor.findText(FINDOPTION.WHOLEWORD | FINDOPTION.MATCHCASE, 0, editor.getLength(), "Short")
pos = editor.gotoPos(texto[0])
ISOLine = editor.lineCopy()
editor.addText(ISOLine.encode('utf8'))
firstLine = editor.getLine(0)
firstLineUnicode = firstLine.decode('latin-1')
editor.replaceWholeLine(firstLineUnicode.encode('latin-1')
Editor.paste()

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

Файлы XML имеют символьный код ISO-8859-1, но эта часть, похоже, получена из источника UTF-8, и символы были интерпретированы только как ISO-8859-1, а не преобразованы.

Я могу исправить это вручную, скопировав всю эту строку, создав новый файл в Notepad++ в формате ISO-8859-1, вставив строку, а затем используя меню «Формат > Кодировать в UTF-8», чтобы она выглядела правильно. Затем я могу выбрать его и скопировать обратно в исходный файл XML.

Однако это не очень практично, поэтому мне было интересно, есть ли лучший способ со скриптом Python.


person mboufleur    schedule 27.04.2017    source источник
comment
У меня нет ответа на ваш вопрос. Но что касается того, где вы говорите: некоторые из моих файлов верны, поэтому мне придется открывать один за другим, чтобы решить, будет ли использоваться сценарий, я думаю, что было бы безопасно просто запустить сценарий на всех ваших файлах. Вам не нужно проверять, нужно ли их исправлять или нет; сценарий, решающий вашу проблему, не должен фактически изменять файлы, которые уже были правильными. (Конечно, вы должны сначала проверить это, просто чтобы убедиться.)   -  person Alex von Brandenfels    schedule 28.04.2017
comment
@ Sweater-Baron Спасибо, но если у меня есть файлы с правильным кодом символа в этой конкретной строке, скрипт также изменит его, тем самым создав проблему при решении проблем для других.   -  person mboufleur    schedule 28.04.2017
comment
Попробуйте выполнить кодирование в UTF-8 в Notepad++ в уже правильной строке. Подозреваю, что не изменит.   -  person Alex von Brandenfels    schedule 28.04.2017


Ответы (1)


В конце концов я нашел решение для этого случая, используя функцию блокнота для изменения кода символа из функции Notepad++, а не используя код Python.

notepad.menuCommand(MENUCOMMAND.FORMAT_UTF_8)
texto = editor.findText(FINDOPTION.WHOLEWORD | FINDOPTION.MATCHCASE, 0, editor.getLength(), "Summary_Short")
curPos = editor.gotoPos(texto[0])
curLineNr = editor.lineFromPosition(texto[0])
curLine = editor.getCurLine()
notepad.menuCommand(MENUCOMMAND.FORMAT_ISO_8859_1)
editor.replaceWholeLine(curLineNr, curLine)

Этот код сначала изменяет код символа из всего XML, затем находит правильную строку, копирует ее, изменяет код символа обратно на исходную кодовую страницу и вставляет предыдущую строку.

Я думал, что смогу сделать то же преобразование, используя код Python, например, ниже

editor.addText(curLine.encode('latin-1'))
editor.replaceWholeLine(curLine.encode('utf8'))

Но мне так и не удалось выполнить точное преобразование, которое я хотел.

person mboufleur    schedule 02.05.2017