Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.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/0/drupal/3.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
在ruby中读取的文件以字符形式输出为空格_Ruby - Fatal编程技术网

在ruby中读取的文件以字符形式输出为空格

在ruby中读取的文件以字符形式输出为空格,ruby,Ruby,我有一个从文件中读取数据的函数,但在读取数据时遇到问题 在文件中输入: 1、S1-88、S2-53、S3-69、S4-64 File.open(file_path).each do |line| p line.gsub(/\s+/, "") end 输出: “1、S1-88、S2-53、S3-69、S4-64\n” 问题是,它在s1-整数、s2-整数之后添加了一个额外的空格,就像这样,我尝试了.gsub(/\s+/,“”)来删除字符串中的空白,但它不起作用,请任何人帮助我为什么会发生这

我有一个从文件中读取数据的函数,但在读取数据时遇到问题

在文件中输入: 1、S1-88、S2-53、S3-69、S4-64

File.open(file_path).each do |line|
    p line.gsub(/\s+/, "")
end
输出: “1、S1-88、S2-53、S3-69、S4-64\n”


问题是,它在s1-整数、s2-整数之后添加了一个额外的空格,就像这样,我尝试了.gsub(/\s+/,“”)来删除字符串中的空白,但它不起作用,请任何人帮助我为什么会发生这种情况,我如何覆盖这个问题,或者它可能是文件编码问题?

如果您不阅读,基本上,中间有UTF-8字符

irb(main):013:0> f = File.binread('f2.txt')
=> "1,S1\xC2\xAD-88,S2\xC2\xAD-53,S3\xC2\xAD-69,S4\xC2\xAD-64"
基本上是空白字符

这可能是因为你从某个地方错误地复制了它,或者是因为上帝而在你的文本中引入了它。不知道,它显示文本之间有隐藏字符

这将删除所有不需要的字符

File.foreach('f2.txt') do |f|
 puts f.gsub(/[^\\s!-~]/, '')
end

=> 1,S1-88,S2-53,S3-69,S4-64

如果您是binread,那么基本上在这两者之间有UTF-8字符

irb(main):013:0> f = File.binread('f2.txt')
=> "1,S1\xC2\xAD-88,S2\xC2\xAD-53,S3\xC2\xAD-69,S4\xC2\xAD-64"
基本上是空白字符

这可能是因为你从某个地方错误地复制了它,或者是因为上帝而在你的文本中引入了它。不知道,它显示文本之间有隐藏字符

这将删除所有不需要的字符

File.foreach('f2.txt') do |f|
 puts f.gsub(/[^\\s!-~]/, '')
end

=> 1,S1-88,S2-53,S3-69,S4-64

你能描述一下你想做什么吗?预期产量是多少<代码>行应该是一个字符串,但您在其上调用
join
,就好像它是一个数组一样。这段代码是否运行?为什么需要UTF-16?@Genzume抱歉,我已经更新了一个问题,我希望输出应该与输入类似,但它在hypen(-)之前增加了一个额外的空间,例如s1-23@lacostenycoder,我想这可能是编码问题,我尝试了一些编码类型不确定StackOverflow是否在格式化方面做了一些奇怪的事情,但您的输入似乎在每个连字符之前都包含一个“不可见”字符(U+00AD软连字符)。试试
.gsub(/[\s\u00ad]+/,“”)
,也许可以。你能描述一下你想做什么吗?预期产量是多少<代码>行应该是一个字符串,但您在其上调用
join
,就好像它是一个数组一样。这段代码是否运行?为什么需要UTF-16?@Genzume抱歉,我已经更新了一个问题,我希望输出应该与输入类似,但它在hypen(-)之前增加了一个额外的空间,例如s1-23@lacostenycoder,我想这可能是编码问题,我尝试了一些编码类型不确定StackOverflow是否在格式化方面做了一些奇怪的事情,但您的输入似乎在每个连字符之前都包含一个“不可见”字符(U+00AD软连字符)。试试
.gsub(/[\s\u00ad]+/,“”)
,也许可以。