2011-07-08 16 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

文字列自体に改行文字はありません。しかし、最後にprintが1つ追加されます。おそらく、文字と混同していますか? –

答えて

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コンソールで改行を表示しますが、漢字はwindowsに出力されます。 – 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コンソールで改行を表示しますが、漢字はwindowsに出力されます。 – Vamsi

関連する問題