【问题标题】:Double quotes("xxx") changes to two double quotes (""xxx"") unexpectedly while read string from file using Python使用 Python 从文件中读取字符串时,双引号 ("xxx") 意外更改为两个双引号 (""xxx"")
【发布时间】:2012-05-09 09:24:03
【问题描述】:

这是一个一直困扰我很多关于 Python 的问题,我真的可以在这方面提供一些帮助:

我正在尝试从文件中读取一些字符串。这些文件是 .rc 后缀,其中每个文件都包含一种本地化字符串。基于不同的语言,我使用不同的代码页进行解码。这里我只以法语文件为例,它的代码页是1252。可悲的是,每次如果有双引号,当我在Python shell中打印字符串时,都会意外出现两个双引号。

.rc 源文件中的行:

La fonction "Test de télécopie" vérifie。

Python shell 中的输出字符串:

La fonction ""Test de télécopie"" 验证。

我做过的一些活动:

f = open(filename,"r")         #Used to open .rc source file
for strline in f.readlines():  #Used to read file line by line
    print strline                #Used to print in Python shell

附加信息:

一个。 .rc 源字符串中的双引号 Hex 代码为:

b.如果我用网络浏览器打开 .rc 源文件,它也会意外显示两个双引号。

c。 .rc源文件属于机密文件,这里就不附上了。

d。操作系统:Enu Win7 x64\Python:v2.7

我是 Python 的新手。任何想法都会非常感激。

最好的问候, ;)

【问题讨论】:

  • 试试print repr(strline) 告诉我们它说了什么。
  • Re-thg435:我尝试了 print repr(strline),但没有任何改变。它仍然显示两个双引号。
  • 您能复制并粘贴print repr(strline) 显示的内容吗?
  • Re-thg435: 这里是: La fonction ""Test de t\xe9l\xe9copie"" v\xe9rifie
  • 您是否尝试过使用hexdump 或类似工具查看源文件?

标签: python string quotes decode


【解决方案1】:

所有的误解都源于我不熟悉 .rc 文件(我以前从未使用过 C++)以及开发人员如何处理字符串。如果我的回答看起来如此未经指导,请不要打我。 :)

经过与相关开发人员的交谈,确认是.rc文件创建者添加的一种机制,用于处理字符串中的双引号。

像下面的字符串: GUI 期待——你好吗,“马克”?

在.rc(或网络浏览器)中-“你好吗,”“标记”“”?

.rc 文件创建者添加了这种机制,即在字符串中添加一个双引号来包围原来的双引号,以确保一旦调用该字符串在 GUI 中显示,它就不会被识别为: -“你好吗,马克”? ==>"How are you," Mark "?"==>这将是一个混乱的双引号匹配,GUI 无法正确显示。

所以我添加了一个过滤器来删除这个额外的双引号,以便得到我想要的。而且我相信这对 Python 用户来说很容易。

不是专业的回答,只是希望让遇到同样问题的人换个角度思考。

我非常感谢之前帮助我确定上述问题的每个人。

【讨论】:

    【解决方案2】:

    您的控制台正在使用 1252 以外的其他代码页。

    编辑:

    #!/usr/bin/python
    # -*- coding: utf-8 -*-
    
    str=u"""La fonction "Test de télécopie" vérifie."""
    print str
    flat=str.encode("cp1252")
    convts=unicode(flat, encoding="cp850") #Change the testing code page here.
    print convts
    

    【讨论】:

    • :操作系统是ENU Win7x64。我还检查了“IDLE Preferences-General 标签”,“Defualt Source Encoding”是“None”。我不确定你是否提到了这个。你能帮忙解释一下吗?
    • @Mark,很抱歉我的猜测可能不对,因为我已经对几个代码页进行了一些测试。现在我更喜欢 thg435 的方法(hexdump 文件)。根据science.co.il/language/Character-Code.asp?s=1252,有3个Hex(5、14、15)对应引用。编辑器/查看器可能不支持所有这些,但您的控制台支持所有这些。
    • 实际上我已经尝试过类似的工具 XVI32 [link] chmaas.handshake.de/delphi/freeware/xvi32/xvi32.htm 来查看十六进制代码并得到 22。我确实使用 thg345 引用的内容将源字符串从 .rc 文件复制并粘贴到了 hexdump,并得到相同的 22 双引号。
    • 在 .rc 源文件中,它正好是 22(不是 22 22)。在 Python shell 中,打印输出字符串,十六进制代码为 22 22。
    • @Mark,22 之前是什么?在十六进制 84、93、94 中? (我在之前的评论中输入了错误的值)它们都是双引号。
    猜你喜欢
    • 1970-01-01
    • 2019-10-04
    • 1970-01-01
    • 2016-02-10
    • 1970-01-01
    • 2013-11-09
    • 2010-12-15
    • 2015-10-29
    • 1970-01-01
    相关资源
    最近更新 更多