Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/422.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Python中的输入中删除从右到左的标记和其他unicode字符_Python_Unicode_Right To Left - Fatal编程技术网

从Python中的输入中删除从右到左的标记和其他unicode字符

从Python中的输入中删除从右到左的标记和其他unicode字符,python,unicode,right-to-left,Python,Unicode,Right To Left,我正在用Python编写一个论坛。我想剥离包含从右向左标记的输入,以及类似的东西。建议?可能是正则表达式?如果您只是想将字符限制为某个字符集的字符,您可以对该字符集中的字符串进行编码,而忽略编码错误: >>> uc = u'aäöüb' >>> uc.encode('ascii', 'ignore') 'ab' OP,在对另一个答案的难以理解的评论中,有一个例子,开头好像是…: comment = comment.encode('ascii', 'ignor

我正在用Python编写一个论坛。我想剥离包含从右向左标记的输入,以及类似的东西。建议?可能是正则表达式?

如果您只是想将字符限制为某个字符集的字符,您可以对该字符集中的字符串进行编码,而忽略编码错误:

>>> uc = u'aäöüb'
>>> uc.encode('ascii', 'ignore')
'ab'

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
,从bytestring中生成一个临时unicode,当然失败了,因为字符串中充满了非ascii字符

在该文本中插入前导的
u

comment = u'\xc3\xa4\xc3\xb6\xc3\xbc'
comment = comment.encode('ascii', 'ignore')
(这当然会使
注释
为空,因为它的所有字符都被忽略)。或者--例如,如果原始字节字符串来自其他源,而不是文字:

comment = '\xc3\xa4\xc3\xb6\xc3\xbc'
comment = comment.decode('latin-1')
comment = comment.encode('ascii', 'ignore')

在这里,第二条语句显式地使用一个似乎适用于本例的编解码器构建unicode(当然,这只是一个猜测:您无法通过只看到一个裸bytestring来确定应该应用哪个编解码器!-),然后第三条语句再次删除所有非ascii字符(并且再次将
注释
留空).

很难猜测要从Unicode字符串中删除的字符集。可能他们都是“”字符吗?如果是,您可以执行以下操作:

import unicodedata

your_unicode_string= filter(
    lambda c: unicodedata.category(c) != 'Cf',
    your_unicode_string)

您可以使用
.replace()
方法通过十六进制值删除字符。

27 comment=comment.encode('ascii','ignore')comment='\xc3\xa4\xc3\xb6\xc3\xbc',comment.encode=UnicodeDecodeError:'ascii'编解码器无法解码位置0处的字节0xc3:序号不在范围内(128)参数=('ascii','\xc3\xa4\xc3\xb6\xc3\xbc',0,1,'序号不在范围内(128)')编码='ascii'结束=1对象='\xc3\xa4\xc3\xbc'原因='序号不在范围内(128)'start=0您的
comment
似乎不是一个unicode对象,而是一个字符串。它似乎是UTF-8编码的,因此您首先需要对其进行解码。使用
comment=comment.decode('UTF-8')
将其转换为相应的unicode对象。对于任何对最终产品感兴趣的人:if uc.decode('UTF-8')!=uc.decode('UTF-8')).encode('ascii','ignore'):return对于难以阅读的注释表示抱歉。因为用户将注释的内容传递给我的脚本,我如何添加前导u?我正在执行:“comment=form.getvalue(key)”然后尝试从那里将其转换为ascii。@Earl,如果用户向您传递一个带有某种编码的bytestring,您需要使用我在回答中给出的最后一个代码片段:显式地将其解码为unicode,然后在跳过非ascii字符的同时将该unicode编码回ascii。但是您必须知道(或者,最坏的情况下,猜猜!)用户使用的编码是什么(不需要猜测,因为这些信息应该是您正在处理的HTTP请求中的
文档类型
头的一部分!-)。为什么要去掉这个或任何非unicode字符?您这么讨厌世界上的其他地方吗?:@badp有点晚了,但是…当您处理任何web元素时,使用RTL unicode标记有时会导致外观上的严重破坏,并且由于浏览器没有以最佳方式处理它,它可能会继续破坏页面中的其他元素。我见过它在Steam上被滥用——当它被用在用户名中时,它最终会把页面中的正常元素弄得一团糟。
"example".replace(u'\u200e', '')