报错排查 · 文件与路径

KNIME 读取 CSV 中文乱码怎么解决

Encoding / Charset

读进来的中文变成问号或者一堆符号。这不是报错,节点是绿灯,数据也进来了,只是字符集选错了。

症状长什么样

正常: 资产编号 资产名称 所属部门 乱码一:���� ���� ���� 乱码二:璧勪骇缂栧彿 璧勪骇鍚嶇О 乱码三:????? ?????

三种乱码对应不同的错配方向,但修法是同一个:告诉读取节点这个文件到底是什么编码。

节点是绿灯,所以这个问题不会主动提醒你。如果乱码只出现在少数几列,或者只在某些行,那多半不是编码问题,而是数据源本身就存坏了 – 那种要回源头解决。

一句话原因

CSV 是纯文本文件,文件本身不记录自己用的是哪套编码。读取时必须由读的人指定。KNIME 默认按 UTF-8 读,而国内绝大多数从 Excel「另存为 CSV」得到的文件是 GBK 编码 – 两边对不上,中文就散了。

怎么修

  1. 打开 CSV Reader 的配置,找编码设置。通常在编码或高级设置一栏里,默认值是 UTF-8。
  2. 改成 GBK。Windows 上从 Excel 导出的 CSV,九成是这个。选项列表里可能写作 GBKGB2312windows-936,任选一个先试。
  3. 还乱就试 GB18030。它是 GBK 的超集,能覆盖更多生僻字。数据里有少数民族姓名、生僻地名时,GBK 读不全而 GB18030 可以。
  4. 重新执行节点看输出表。改编码属于改配置,节点会退回黄灯,要重跑才看得到效果。
别去改文件内容来迁就工具。有人会把 CSV 用记事本另存成 UTF-8 再读。一次性的活可以,但如果这条工作流以后每月要跑,人工转码这一步早晚会被忘掉。在节点里把编码设对,才是能重复执行的做法。

反过来:写出去的文件在 Excel 里乱码

用 CSV Writer 导出,KNIME 这边看着好好的,用 Excel 一打开全是乱码。这是另一个方向的同一个问题:Excel 打开 CSV 时默认不按 UTF-8 解,除非文件开头有个叫 BOM 的标记。

你的需求写出时怎么设
结果要用 Excel 双击打开看编码选带 BOM 的 UTF-8;或者干脆用 Excel Writer 直接写 xlsx,绕开这个问题
结果要给别的系统导入问清对方要什么编码,多数国内老系统要 GBK
结果只是给下一条工作流读保持 UTF-8,两边一致就行
给人看的结果,优先用 Excel Writer 而不是 CSV Writer。xlsx 文件自己带编码信息,不存在这个问题,还能保留列类型和多个工作表。CSV 留给需要跨系统交换的场合。

怎么预防

  • 固定来源的文件,第一次把编码试对之后,这条工作流以后就不用再管了。麻烦的是来源不固定的场景 – 那就在流程开头统一走一个读取节点,别每个分支各配一遍。
  • 拿不准文件编码时,用支持编码切换的文本编辑器打开看一眼,比在 KNIME 里反复试快。
  • 如果你能决定上游怎么给数据,直接要 xlsx 或 UTF-8 的 CSV,能免掉一整类问题。

GBK 和 GB18030 都试过还是乱

把乱码的输出表截图发过来,另外说明这个文件是怎么产生的 – 从哪个系统导出、中间经过谁的手 – 这两条信息通常就能定位。

iModel 专属客服
网页直接对话,无需微信
4008568196 拨打此号码联系我们

微信扫码咨询

iModel 微信咨询二维码

使用微信扫描上方二维码