2012-05-09 38 views
1

這是一個困擾我很多關於Python的問題,我真的可以使用一些幫助在此:使用Python從文件中讀取字符串時,雙引號(「xxx」)意外變爲兩個雙引號(「」xxx「」)

我想從文件中讀取一些字符串。這些文件是.rc後綴,其中一種本地化字符串位於每個文件的內部。基於不同的語言,我使用不同的代碼頁進行解碼。在這裏,我僅以法文文件爲例,它的代碼頁是1252.不幸的是,每當有雙引號時,當我在Python shell中打印字符串時,會出現兩個雙引號意外。

在.RC源文件中的行:

拉fonction 「測試德télécopie」 vérifie。

輸出字符串在Python Shell:

拉fonction 「」 測試德télécopie 「」 vérifie。

有些活動我所做的:

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源字符串中的雙引號十六進制代碼是:

b。如果我使用網絡瀏覽器打開.rc源文件,它還會意外顯示兩個雙引號。

c。 .rc源文件是保密的,所以我沒有在這裏附上。 d)。 OS:Enu Win7 x64 \ Python:v2.7

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

最好的問候, ;)

+0

嘗試'print repr(strline)'並告訴我們它說了什麼。 – georg

+0

Re-thg435:我試過打印repr(strline),但沒有改變。它仍然顯示兩個雙引號。 – Mark

+0

你可以在這裏複製並粘貼'print repr(strline)'顯示的內容嗎? – georg

回答

2

所有的誤解來自於我不是熟悉.rc文件(我以前從未使用C++)以及開發人員如何處理字符串。如果我的回答看起來如此無人問津,請不要打我。 :)

在與相關開發人員交談之後,它被確認爲由.rc文件創建者添加的機制,用於處理字符串中的雙引號。

像下面的字符串: GUI期望 - 你好,「馬克」?

在.rc(或網頁瀏覽器) - 「你好嗎」,「馬克」「」?

The。rc文件創建者添加了這種機制,即在字符串中添加一個雙引號以包圍原始字符串,以確保一旦該字符串被調用以在GUI中顯示,它將不會被識別爲: - 「你好嗎? 「 ==>「你好嗎,」馬克「?」==>這將是一個混亂的雙引號匹配,無法正確顯示GUI。

所以我添加了一個過濾器來刪除這些額外的雙引號,以獲得我想要的。我相信Python用戶很容易。

這不是一個專業的答案,但我只是希望讓遇到同樣問題的人以不同的方式思考。

我真的很感謝所有幫助我找出上述問題的人。

0

您的控制檯使用另一非代碼頁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 
+0

:操作系統是ENU Win7x64。我也檢查了「IDLE首選項 - 常規」選項卡,「Defualt Source Encoding」爲「無」。我不確定你是否參考了這個。請你幫忙解釋一下嗎? – Mark

+0

@Mark,對不起,我的猜測可能不對,因爲我已經對幾個代碼頁進行了一些測試。現在我更喜歡thg435的方法(hexdump文件)。根據http://www.science.co.il/language/Character-Code.asp?s=1252,有3個十六進制(5,14,15)對應報價。編輯器/瀏覽器可能不支持所有這些,但是你的cosole支持所有這些。 – wuliang

+0

其實我試過類似的工具XVI32 [鏈接] http://www.chmaas.handshake.de/delphi/freeware/xvi32/xvi32.htm來查看十六進制代碼並得到了22.我沒有複製並通過源字符串從.rc文件到使用什麼thg345引用hexdump,並獲得相同的22雙引號。 – Mark

相關問題