File 如何转换'¿';unix中的特殊字符

File 如何转换'¿';unix中的特殊字符,file,encoding,utf-8,character-encoding,unicode-string,File,Encoding,Utf 8,Character Encoding,Unicode String,我有一个file.dat文件,里面有CNBC:America's Gun:AR的崛起–15 不幸的是,我得到了一些特殊字符,这些字符无法在unix的iconv函数中正确转换 $ file -bi file.dat text/plain; charset=utf-8 $ cat file.dat | cut -c14 | od -x 0000000 bfc2 000a 0000003 你能帮我转换这个特殊字符吗 提前谢谢 -Praveen您的文件基本上很好,它采用了正确的UTF-8格式,

我有一个file.dat文件,里面有CNBC:America's Gun:AR的崛起–15

不幸的是,我得到了一些特殊字符,这些字符无法在unix的iconv函数中正确转换

$ file -bi file.dat

text/plain; charset=utf-8

$ cat file.dat | cut -c14 | od -x

0000000 bfc2 000a

0000003
你能帮我转换这个特殊字符吗

提前谢谢


-Praveen

您的文件基本上很好,它采用了正确的UTF-8格式,并且您正在查看的字符是一个(尽管您似乎正在使用一些传统的8位字符集来查看文件,
od-x
的输出是面向字的小尾端,因此您可以向后获取十六进制-序列是0xC2 0xBF,而不是相反)

说明当Oracle尝试导出到未知字符集时,它将用倒置的问号替换无法转换的字符。所以我想这就是这里发生的事情。唯一正确的修复方法是返回到Oracle数据库并以适当的格式导出,其中卷曲撇号是可表示的(我认为字符应该是这样的)

如果文件来自其他人的Oracle数据库,请让他们再次进行导出,或者询问他们字符应该是什么,或者忽略问题,或者猜测要放在那里的字符,然后使用编辑器。如果只有几个问题字符,只需手动执行即可。如果有很多,也许你可以使用上下文相关的替换规则,比如

it¿s => it’s
dog¿s => dog’s
¿problem¿ => ‘‘problem’’
na¿ve => naïve
¿yri¿ispy¿rykk¿ => äyriäispyörykkä (obviously!)

使用
作为“我不知道”的占位符是有问题的,但Unicode实际上有一个解决方案:。我想您不会喜欢这样,但是您可以通过编程执行的唯一有效(无上下文)替换是
s/\u{00BF}/\u{FFFD}/g
(这是Perl-ish伪代码,但可以随意使用)。

谢谢您的回复。但我的来源是一个平面文件,而不是来自oracle数据库。有没有办法让我得到一个等效的unix命令来像iconv一样转换它?不管是什么产生了这个平面文件,都会在那里打上一个倒过来的问号。因此,该文件很好——无法通过编程方式恢复该文件。如果您可以自信地猜出角色应该是什么(卷曲撇号?),请使用编辑器进行更改。但您应该将环境设置为UTF-8,以便能够正确查看文件。我不想猜东西,我想通过手动中断自动转换,因为我们可能会在将来得到一些其他的特殊字符,同样的问题..你错误地认为这是一个可逆过程的结果。事实并非如此。在每一个实例中,都可以代表数十万个字符。