2011-07-08 62 views
1

我有一段Unicode文本。我想在打印輸出之前從文本中刪除所有換行符。我的代碼看起來是這樣的:從python中的unicode字符串中刪除換行符的問題

input_string = u'\u3010JK\u3011\u9032\u5b66\u306b\u56f0\u3063\u305f\uff2a\uff2b\u304c\u5148\u751f\u306b\u52a9\u3051\u3066\u3082\u3089\u3046\u305f\u3081\u306b\uff33\uff25\uff38\uff01.mov' 
output_string = ' '.join(input_string.splitlines()) 
print output_string 

我希望圖書館法採取的所有髒換行字符uncicode案件護理。但是,它看起來像這種方法不會從給定的輸入中刪除換行符。請建議一個解決方案,從給定的輸入中刪除換行符。

+0

我們在哪裏有換行符? –

+0

輸出字符串打印換行符。所以我無法得到爲什麼會出現這種行爲。 – Vamsi

+1

我看到字符串本身沒有換行符。但是,打印在最後添加一個,也許你會把它與chars混淆? –

回答

6

根據我的Python,您的字符串不包含類別Cc(控制字符)的字符:

>>> unicodedata.category(u'\n') in map(unicodedata.category, input_string) 
False 

所以在此字符串沒有換行符。 unicodedata.name確認:

>>> for c in s: print unicodedata.name(c) 
... 
LEFT BLACK LENTICULAR BRACKET 
LATIN CAPITAL LETTER J 
LATIN CAPITAL LETTER K 
RIGHT BLACK LENTICULAR BRACKET 
CJK UNIFIED IDEOGRAPH-9032 
CJK UNIFIED IDEOGRAPH-5B66 
HIRAGANA LETTER NI 
CJK UNIFIED IDEOGRAPH-56F0 
HIRAGANA LETTER SMALL TU 
HIRAGANA LETTER TA 
FULLWIDTH LATIN CAPITAL LETTER J 
FULLWIDTH LATIN CAPITAL LETTER K 
HIRAGANA LETTER GA 
CJK UNIFIED IDEOGRAPH-5148 
CJK UNIFIED IDEOGRAPH-751F 
HIRAGANA LETTER NI 
CJK UNIFIED IDEOGRAPH-52A9 
HIRAGANA LETTER KE 
HIRAGANA LETTER TE 
HIRAGANA LETTER MO 
HIRAGANA LETTER RA 
HIRAGANA LETTER U 
HIRAGANA LETTER TA 
HIRAGANA LETTER ME 
HIRAGANA LETTER NI 
FULLWIDTH LATIN CAPITAL LETTER S 
FULLWIDTH LATIN CAPITAL LETTER E 
FULLWIDTH LATIN CAPITAL LETTER X 
FULLWIDTH EXCLAMATION MARK 
FULL STOP 
LATIN SMALL LETTER M 
LATIN SMALL LETTER O 
LATIN SMALL LETTER V 
+0

事實證明,在Unix中渲染此文本似乎存在一些問題。 for i,v in enumerate(output_string):print i,v 在上述行的輸出中,索引第13個值在Unix控制檯中打印換行符,而中文字符打印在窗口中。 – Vamsi

+0

@Vamsi:那麼你應該把你的終端設置爲UTF-8。請參閱您的手冊,瞭解如何做到這一點。 –

1

此字符串中沒有換行符或任何類似換行符。它有33個字符,它們都是可打印的字符,而不是格式。

也許你很困惑,print聲明增加了一個換行符到sys.stdout.write的行爲?

+0

事實證明,在Unix中渲染此文本似乎存在一些問題。 for i,v in enumerate(output_string):print i,v 在上述行的輸出中,索引第13個值在Unix控制檯中打印換行符,而中文字符打印在窗口中。 – Vamsi