我正在用Python写一个论坛。我想剥离含有从右到左的标记和类似的东西。建议?可能是一个正则表达式?从Python输入中删除从右到左的标记和其他Unicode字符
回答
如果你只是想字符限制于那些特定的字符集,您可以将字符串编码在该字符集,只是忽略编码错误:
>>> uc = u'aäöüb'
>>> uc.encode('ascii', 'ignore')
'ab'
27 comment = comment.encode('ascii','ignore') comment ='\ xc3 \ xa4 \ xc3 \ xb6 \ xc3 \ xbc',评论。encoding = <0x11db40处str对象的内置方法编码> UnicodeDecodeError:'ascii'编解码器无法解码0位的字节0xc3:序号不在范围内(128) args =('ascii','\ xc3 \ xa4 \ xc3 \ xb6 \ xc3 \ xbc',0,1,'ordinal not in range(128)') encoding ='ascii' end = 1 object ='\ xc3 \ xa4 \ xc3 \ xb6 \ xc3 \ xbc' reason ='序号不在范围内(128)' start = 0 – rhombidodecahedron 2010-06-01 00:52:21
您的'comment'似乎不是一个unicode对象,而是一个字符串。它似乎是UTF-8编码,所以你首先需要解码它。使用'comment = comment.decode('utf-8')'将其转换为相应的unicode对象。 – sth 2010-06-01 01:12:45
对于任何对最终产品感兴趣的人: 如果uc.decode('utf-8')!= uc.decode('utf-8')。encode('ascii','ignore'):return – rhombidodecahedron 2010-06-29 05:24:55
的OP,在难另一个答案 - 读取评论,有似乎开始喜欢一个例子...:
comment = comment.encode('ascii', 'ignore')
comment = '\xc3\xa4\xc3\xb6\xc3\xbc'
那当然,按次序用两种说法,将是一个不同的错误(第一个尝试访问comment
但只有第二个绑定该名称),但让我们假设两条线互换,具体如下:
comment = '\xc3\xa4\xc3\xb6\xc3\xbc'
comment = comment.encode('ascii', 'ignore')
这,这的确会导致OP似乎有在难以阅读评论的错误,是出于不同的原因一个问题:comment
是字节字符串(开头引号前没有前导的u
),但.encode
适用于unicode字符串 - 所以Python首先尝试使用默认编解码器ascii
创建一个临时unicode,该字符串当然失败因为该字符串充满了非ASCII字符。
插入在字面领先u
将工作:
comment = u'\xc3\xa4\xc3\xb6\xc3\xbc'
comment = comment.encode('ascii', 'ignore')
(这当然是叶comment
空,因为所有它的字符被忽略)。或者 - 例如,如果原始字节字符串来自其他来源,没有文字:
comment = '\xc3\xa4\xc3\xb6\xc3\xbc'
comment = comment.decode('latin-1')
comment = comment.encode('ascii', 'ignore')
这里,第二条语句明确构建统一码,似乎适用于本例中的编解码器(只是猜测,当然,你不能确定哪一个编解码器应该从仅仅看到一个空字节串开始! - ),然后第三个删除所有非ascii字符(并且再次将空的comment
留下)。
对不起难以阅读的评论。因为用户将评论的内容传递给我的脚本,我该如何添加领先的u?我在做:“comment = form.getvalue(key)”,然后尝试从那里将其改为ascii。 – rhombidodecahedron 2010-06-01 01:24:30
@Earl,如果用户传递给你一个带有某种编码的字节串,则需要使用我在答案中给出的最后一个片段:将其明确解码为unicode,然后将该unicode编码回ascii,同时跳过非ascii字符。但是你必须知道(或者,最坏的情况下,猜测!)用户使用什么编码(猜测不需要,因为该信息应该是HTTP请求中的“文档类型”头部分的一部分)重新处理! - )。 – 2010-06-01 01:51:01
很难猜出要从Unicode字符串中移除的字符集。难道他们都是“Other, Format”字符?如果是的话,你可以这样做:
import unicodedata
your_unicode_string= filter(
lambda c: unicodedata.category(c) != 'Cf',
your_unicode_string)
- 1. 从字符串中删除Unicode字符
- 2. Python从右到左和从左到右打印得很好
- 3. 从vb6中的字符串的右侧和左侧删除某个字符(TrimChar)
- 4. MS SQL 2012从右侧和左侧删除重复字符
- 5. 从字符串中删除html标记
- 6. 从字符串中删除html标记
- 7. 从NSString中删除标记字符
- 8. 从obj c删除%2520和其他非标准字符
- 9. 大熊猫:从左到右和从右到左交替排列()从左到右
- 10. 如何从输出中删除除字母之外的其他字符的行?
- 11. 从右到左输入掩码
- 12. 从右到左文本HTML输入
- 13. 输入等级从右到左
- 14. 引导RTL(从右到左)输入组
- 15. SQL查询删除字段中的左侧和右侧字符
- 16. 在Python中从右到左的字符串替换?
- 17. 从一个字符串中删除PHP标记与Python
- 18. 如何从Python字符串中去除unicode“标点符号”
- 19. python字符串,删除字符,从右边开始计数
- 20. Python:从字符串中删除字符
- 21. Python中从右到左的语言
- 22. 从Python列表中删除BeautifulSoup标记
- 23. 淡入(从右到中)和离开(从中心到左侧)
- 24. 函数用于将字符串中的字符数从右到左传输到目标字符串
- 25. 如何从左到右和从右到左遍历数组?
- 26. UITableView区分从左到右和从右到左滑动
- 27. 淡入和淡出从右到左
- 28. 从字符串中删除U \ 0000fffc unicode标量
- 29. Windows:使用TextOut输出从右到左的字符
- 30. 文字:从右到左(CSS)
你为什么要剥离[BOM(http://unicode.org/faq/utf_bom.html#BOM)或任何非Unicode字符?你恨世界其他地方这么多? :) – badp 2010-06-26 09:05:10
@badp有点晚,但是......当你使用任何web元素时,使用RTL unicode标记有时会导致外观剧烈破裂,并且由于浏览器没有以最好的方式处理它,它可以继续打破页面内的其他元素。我看到它在Steam上被滥用 - 它甚至会在用户的名字中使用页面内部的正常元素时造成绝对混乱。 – damianb 2013-03-14 17:27:40