【问题标题】: or ? character is prepended to first column when reading csv file from s3 by using camel 或 ?使用骆驼从 s3 读取 csv 文件时,字符被添加到第一列
【发布时间】:2020-03-09 15:27:51
【问题描述】:

csv 文件位于 S3 存储桶中,我正在使用 camel aws 来使用 csv 文件。 但是,每当将 csv 文件加载到本地时, 或 ?字符被假装到第一列。

例如, 原始文件 名,姓 布莱恩,西

加载到本地后 名字,姓氏 布莱恩,西

我已经对此链接进行了研究:R's read.csv prepending 1st column name with junk text 但是,它似乎不适用于骆驼。

如何从 s3 读取 csv 文件 使用 aws-s3 使用 s3 存储桶中的 csv 文件,例如 "Exchange s3File = consumer.receive(s3Endpoint)" where s3Endpoint = "aws-s3://keys&secret?prefix=%s&deleteAfterRead=false&amazonS3Client=#awsS3client"

【问题讨论】:

  • 是的,我试过了。 '' 转换为 '?'。但是,我找到了解决方法。用记事本++打开.csv文件->转到编码并保存为utf-8。当我再次读取 csv 文件时,'' 字符被删除。但是,这不是我的首选解决方案
  • 您可能会提供有关您尝试的更多详细信息,因为 BOMInputStream 的目的是提取字节顺序标记字符。

标签: csv apache-camel


【解决方案1】:

字符UTF-8 BOM (Hex EF BB BF)。所以这是关于放置在文件开头的文件内容的元数据(因为没有“标题”或类似的地方可以保存它)。

如果您读取以该序列开头的文件,但您将其读取为 Windows 标准编码 (CP1252) 或 ISO-8859-1,您会得到这些文件内容开头的三个奇怪字符。

为避免您必须按照@jws 评论中的建议以 UTF-8 和 BOM 感知方式读取文件。他还为this link 提供了如何使用BOMInputStream 正确读取此类文件的示例。

如果文件被正确读取,并且您将其写回具有不同编码(如 CP1252)的文件中,则应删除 BOM。

那么,现在的问题是您究竟如何使用 Camel 读取文件?如果您(或库)使用非 UTF-8 编码读取它(可能是默认情况下),这就解释了为什么您会在文件内容中获得这些字符。

【讨论】:

  • 感谢您的反馈。我更新了我的帖子,并在“如何读取 csv 文件”下描述了我如何使用骆驼获取 csv 文件
  • 应该有S3消费者设置的消息头CamelAwsS3ContentEncoding。你检查过这个吗?
猜你喜欢
  • 2020-07-04
  • 1970-01-01
  • 2013-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多