无法读取 UTF-16 文件

Posted

技术标签:

【中文标题】无法读取 UTF-16 文件【英文标题】:Unable to read UTF-16 file 【发布时间】:2021-03-24 14:05:08 【问题描述】:

我正在尝试在 Spark 数据帧中读取编码为 UTF-16 的文件。但是,当我显示我的数据框的结果时,我的结果集中出现了不需要的特殊字符。

我尝试了以下方法 - 使用 UTF-16BE:

df = spark.read.format('text').option("encoding", 'UTF-16BE').option("charset", 'UTF-16').option('delimiter', "\|").option('header', 'false').option("quote", "\"").option("escape", "\"").load(filepath)

并使用 UTF-16LE 尝试了以下操作:

df = spark.read.format('text').option("encoding", 'UTF-16LE').option("charset", 'UTF-16').option('delimiter', "\|").option('header', 'false').option("quote", "\"").option("escape", "\"").load(filepath)

两次尝试都返回不需要的特殊字符。

非常感谢任何帮助。

【问题讨论】:

text 格式不支持编码选项。请改用csv。在此处查看可用选项:text、csv。 【参考方案1】:

我认为您想使用csv 而不是text,因为text 格式不支持您尝试使用的选项。试试看:

df = spark.read.format("csv")\
    .option("encoding", "UTF-16")\
    .option('sep', "|")\
    .option("escape", "\"")\
    .load(filepath)

请注意,选项header 的默认值为 false,因此无需指定它,quote 也是如此。另外,没有charset选项,你只需要encoding选项。

您可以在此处找到每个数据源的所有可用选项:DataFrameReader

【讨论】:

以上是关于无法读取 UTF-16 文件的主要内容,如果未能解决你的问题,请参考以下文章

Apache Spark 读取 UTF-16 CSV 文件

如何读取 UTF-16 文件并将其内容与使用十六进制值定义的 wchar_t* 字符串文字进行比较

java 读取必须使用特定字符集解码的文件(在本例中为UTF-16 LE)。

java读取UTF-8的txt文件发现开头的一个字符问题

JavaScript 从“byte”源读取UTF16字符串

node读取本地文件中文乱码