【问题标题】:Change single line character code with Notepad++ and PythonScript使用 Notepad++ 和 PythonScript 更改单行字符代码
【发布时间】:2017-09-25 21:19:04
【问题描述】:

我目前有一堆 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 脚本方法。

【问题讨论】:

  • 我没有回答你的问题。但是关于你在哪里说:“我的一些文件是正确的,所以我必须一个一个地打开才能决定是否使用脚本”,我认为只在你所有的文件上运行脚本是安全的文件。您无需检查它们是否需要修复;解决您的问题的脚本不应最终实际更改已经正确的文件。 (当然,你应该先测试一下,以确保。)
  • @Sweater-Baron 谢谢,但如果我在该特定行中有一些具有正确字符代码的文件,脚本也会更改它,从而在解决其他问题的同时产生问题。
  • 尝试在 Notepad++ 中在已经正确的行上执行“以 UTF-8 编码”的操作。我怀疑它不会改变它。

标签: python xml utf-8 notepad++ iso-8859-1


【解决方案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'))

但我从来没有得到它来执行我想要的确切转换。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-18
    • 2015-03-18
    • 2010-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多