【问题标题】:non ascii special char remove from csv file从 csv 文件中删除非 ascii 特殊字符
【发布时间】:2019-01-18 17:36:47
【问题描述】:

当我在 linux 中编辑 csv 文件时,特殊字符看起来像 £stackoverflow、£unixbox、£query。我的查询是如何从 csv 文件中删除 Â。

输入: £stackoverflow, £unixbox,£query 输出:£stackoverflow,£unixbox,£query

linux盒子的观察: 当前 linux 窗口翻译设置是 ISO-8859-1,而我正在更改窗口设置--->翻译->UTF-8 然后使用 vi 编辑器打开相同的文件 char 消失。我也尝试过 iconv 命令但没用。这可能是我将文件 ISO-8859-1 转换为 UTF-8 的原因,但 Linux 的默认设置是 ISO-8859-1,所以它向我显示它没有删除这个字符.如何处理它以删除它。

【问题讨论】:

  • sed 's/Â//g' file?
  • 我认为您应该回过头来解决实际问题。原始字节是什么以及使用哪种字符编码来编写它们?
  • 谢谢,但是当我复制空间或反转另一个字符时,我无法在 linux 框中复制 Â char,所以现在没有帮助

标签: linux shell awk


【解决方案1】:

您可以尝试以下 Perl 解决方案。这将删除所有不在 32 到 127 范围内的序数值(其中包含 ascii 文本)

$ echo "£stackoverflow, £unixbox,£query Output: £stackoverflow, £unixbox,£query" | perl -pe ' s/[^\x20-\x7f]//g '
stackoverflow, unixbox,query Output: stackoverflow, unixbox,query
$

编辑:

要仅删除 Â,请使用

$ echo "Â" | perl -pe ' s/./sprintf("%x |",ord($&))/eg '  # Find the underlying ordinal values for  
c3 |82 |

$ echo "£stackoverflow, £unixbox,£query" | perl -pe ' s/\xc3\x82//g ' #removing it using s///
£stackoverflow, £unixbox,£query

$

【讨论】:

  • 感谢您的帮助,但我的问题是,输入: £stackoverflow, £unixbox,£query 并且结果将是 £stackoverflow, £unixbox,£query
  • 它在我的情况下不起作用,因为我无法在 linux 中仅在 vi 编辑器中读取 £ 我可以看到这个,否则它看起来像 £ 而已。但我的问题是即使在 vi 编辑器之后,它也应该看起来像实际值 £ 而不是  £。并且如果您可以共享 synatx 以在 linux 中将 $ 转换为 £ 内部文件。当前 linux 无法读取 £ char
  • 可能是其他字符..你能收集文件的十六进制转储
  • hexdump <filename>
  • echo "$" | sed 's/\$/£/g'
猜你喜欢
  • 2013-09-02
  • 1970-01-01
  • 1970-01-01
  • 2016-07-28
  • 1970-01-01
  • 2013-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多