Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/280.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/4/string/5.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从字符串中删除非中断空格_Python_String_Unicode_Text - Fatal编程技术网

使用Python从字符串中删除非中断空格

使用Python从字符串中删除非中断空格,python,string,unicode,text,Python,String,Unicode,Text,我在Python中遇到了一个非常基本的字符串问题(我无法理解)。基本上,我正在努力做到以下几点: '# read file into a string myString = file.read() '# Attempt to remove non breaking spaces myString = myString.replace("\u00A0"," ") '# however, when I print my string to output to console, I get:

我在Python中遇到了一个非常基本的字符串问题(我无法理解)。基本上,我正在努力做到以下几点:

'# read file into a string 
myString =  file.read()

'# Attempt to remove non breaking spaces 
myString = myString.replace("\u00A0"," ")

'# however, when I print my string to output to console, I get: 
Foo **<C2><A0>** Bar
”#将文件读入字符串
myString=file.read()
“#尝试删除非中断空格
myString=myString.replace(“\u00A0”,”)
“#但是,当我将字符串打印到控制台输出时,我得到:
Foo****酒吧

我原以为“\u00A0”是unicode非中断空格的转义码,但显然我做得不正确。关于我做错了什么,你有什么想法吗?

在你写的东西中没有任何迹象表明你一定做错了什么:如果原始字符串在“Foo”和“Bar”之间有一个不间断的空格,那么你现在在那里有一个正常的空格。这假设您在某个时候已经将输入字符串(我认为是bytestring,除非您使用的是Python 3或
文件
是使用
编解码器
模块中的函数打开的)解码为Unicode字符串,否则您不太可能在非Unicode字节字符串中找到Unicode字符,出于
的目的,请更换
。但是,你写的东西中仍然没有明确的问题迹象


您能否澄清什么是输入(替换前打印
repr(myString)
)和什么是输出(替换后打印
repr(myString)
),以及您认为这是一个问题的原因?如果没有
repr
,实际上不同的字符串可能看起来相同,但
repr
在这方面很有帮助。

否,
u“\u00A0”
是不间断空格的转义码<代码>“\u00A0”
是6个字符,不是任何类型的转义码

您没有unicode字符串,而是一个UTF-8字节列表(Python 2.x中的字符串)

试一试

最好是切换到unicode——请参阅以获取更多想法。你可以这样说

uniString = unicode(myString, "UTF-8")
uniString = uniString.replace(u"\u00A0", " ")

它也应该可以工作(注意:我现在没有Python2.x可用),尽管在将其发送到文件或打印到屏幕时需要将其转换回字节(二进制)。

请注意,一个简单的
myString.strip()
不仅会删除空格,而且从myString的开始和结束都是不间断的空格。不完全是OP要求的,但在许多情况下仍然非常方便。

我在为一个老问题添加另一个答案之前犹豫了一下,但是由于Python3将Unicode“非中断空格”字符计算为空白字符,并且字符串默认为Unicode,您可以使用
join
split
删除字符串
s
中的非中断空格,如下所示:

s = ' '.join(s.split())

当然,这也会改变任何其他空白(制表符、换行符等)。请注意,这只是Python3。

您可以通过强制编码来解决这个问题

 cleaned_string = myString.encode('ascii', 'ignore')

还请注意,python的空白正则表达式字符与不间断空格匹配

以下代码将用单个空格替换一个或多个空格/非中断空格

重新导入
re.sub(r'\s+','',u“字符串,带空格和非\u00a0间断\u00a0空格”)
#'带空格和不间断空格的字符串'

您使用的是哪个版本的Python(答案可能会因您使用的是2.x还是3.x而有所不同)?嗨,Kathy,是的,我正在使用Python v2.5.1编辑我的答案作为回应。您提供的链接可能对初学者有好处,但会产生误导。它完全忽略了Unicode规范化,例如,
'ć'
u'\u0107'
,它可以表示为
u'c\u0301'
您的解决方案非常有用。非常感谢。您的UTF-8解决方案正是我在日志文件中获得不间断空间所需要的。虽然当记录器将日志记录回显到控制台(不是UTF-8)时,输出看起来很奇怪,当然,它看起来很奇怪,但它在日志文件中变得完全不可见,导致它完全按照我的需要显示,在我的列标签上方有一个空行。看起来站点消失了。。我将寻找类似的替代方法。在Python 3中是否需要使用
unicode()
函数或u“”?我之所以问这个问题,是因为我的理解是Python3只对unicode中的任何字符串进行编码。这个答案肯定是2.x的答案——Python3对字符串的处理方式不同。
 cleaned_string = myString.encode('ascii', 'ignore')