【问题标题】:Issue with removing newline character from unicode string in python从python中的unicode字符串中删除换行符的问题
【发布时间】:2011-10-01 06:24:36
【问题描述】:

我有一段 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 字符情况。但是,看起来这个方法不会从给定的输入中删除换行符。请提出从给定输入中删除换行符的解决方案。

【问题讨论】:

  • 我们这里哪里有换行符?
  • 输出字符串打印换行符。所以我无法理解为什么会出现这种行为。
  • 我在字符串本身中看不到换行符。但是,print在最后加了一个,可能你把它和chars搞混了?

标签: python unicode newline unicode-string


【解决方案1】:

根据我的 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

【讨论】:

  • 事实证明,在 Unix 中渲染此文本似乎存在一些问题。 for i,v in enumerate(output_string): print i,v 在上面一行的输出中,第 13 个索引值在 Unix 控制台中打印一个换行符,而在 windows 中打印一个汉字。
  • @Vamsi:那么您应该将终端设置为 UTF-8。请参阅您的手册以了解如何执行此操作。
【解决方案2】:

此字符串中没有换行符或类似换行符的内容。它有 33 个字符,都是可打印的字符,不是格式化的。

您可能对print 语句在末尾添加换行符与sys.stdout.write 的行为感到困惑?

【讨论】:

  • 事实证明,在 Unix 中渲染此文本似乎存在一些问题。 for i,v in enumerate(output_string): print i,v 在上一行的输出中,第 13 个索引值在 Unix 控制台中打印一个换行符,而在 windows 中打印一个汉字。
猜你喜欢
  • 1970-01-01
  • 2016-11-13
  • 2017-07-26
  • 1970-01-01
  • 2011-09-23
  • 2022-12-16
  • 1970-01-01
  • 2014-03-20
  • 2016-08-29
相关资源
最近更新 更多