在unix中处理utf 8个字符

时间:2014-06-06 13:15:49

标签: unix exception encoding utf-8

我试图为我的问题找到解决方案,在查看论坛后我无法解释我的问题。

我们从客户端收到一个带有一些特殊字符的csv文件,并编码为unknown-8bit。我们使用awk脚本将此csv文件转换为xml。使用xml文件,我们使用utf-8作为默认编码对我们的系统进行API调用。响应是以下信息的错误:

org.apache.xerces.impl.io.MalformedByteSequenceException:1字节UTF-8序列的无效字节1

该文件的内容如下:

151215901579-109617744500,sandra,sandra,Coesfeld ,, Coesfeld,48653,DE,1,2.30,ASTRA 16V CAVALIER CALIBRA TURBO BLUE 10,53.82,GB ,,。80,3,ASTRA 16V CAVALIER CALIBRA TURBO BLUE 10MM 4CORE IGNITION HT LEADS WIRES MLR.CR ,, sandra @ online.de,parcel1,Invalid Request ,,%004865315500320004648880276,INTL,%004865315500320004648880276,1,INTL,DPD,180380,INTL,2.30,Send A2B Ltd,4th Floor,200 Gray's Inn Road,LONDON ,, WC1X8XZ,GBR,

我认为问题出在现场" 200 Gray's Inn Road"因为当我使用utf-8编码时它会自动转换"'"字符乘以x92值。

有人知道我该怎么办?

提前致谢,

桑德拉

2 个答案:

答案 0 :(得分:0)

显然,如果不是,请不要假装它是UTF-8。找出编码是什么,或用UTF-8 REPLACEMENT CHARACTER序列0xEF 0xBF 0xBD替换所有非ASCII字符。

由于你能够很好地查看这个特定的样本,你显然已经知道它是哪种编码(即使你不知道你知道 - 这将是你目前的设置使用的) - 我猜Windows-1252使用0x92作为弯曲的右单引号。

答案 1 :(得分:0)

首先找出实际编码,最好是询问发件人 如果您不能这样做,并且还进行完整性检查,则unix command file对此非常有用(链接页面显示更多选项)。
下一步,转换为UTF-8。

由于它显然是一种基于ASCII的编码,如果丢失是可接受的,你可以放弃所有非ASCII或在编码时替换它们。

作为替代方案,在您选择的编辑器中打开它,并翻转用于解释数据的编码,直到您获得有用的内容。我的猜测是你有拉丁语-1或Windows-1252,但请亲自检查一下。

最后一步,按照您现在拥有有效UTF-8的知识做您想做的事。