You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Elixir代码将文件从代码页936转UTF-8?已找到codepage字符串转换包

文件代码页转换解决方案(基于codepage包)

核心逻辑

文件转码的本质是「读取原编码字节→转译为Unicode→编码为目标字节→写入新文件」,借助codepage包可以完成完整的编码转换链路。

方案1:常规文件转码(Elixir)

适用于中小体积文件,一次性处理:

  1. 读取文件原始字节(避免默认编码解析干扰)
  2. 用codepage将字节解码为Unicode字符串
  3. 再编码为目标编码的字节流
  4. 写入新文件

示例代码:

defmodule FileConverter do
  def convert(input_file, output_file, from_code, to_code) do
    input_file
    |> File.read!()
    |> Codepage.from_string(from_code)
    |> Codepage.to_string(to_code)
    |> then(&File.write!(output_file, &1))
  end
end

# 调用示例:将GBK编码文件转为UTF-8
FileConverter.convert("source_gbk.txt", "target_utf8.txt", :gbk, :utf8)

方案2:大文件流式转码

针对大文件(避免内存溢出),采用分块流式处理:

  • 分块读取原始字节流
  • 逐块完成转码后写入目标文件
  • 注意:部分多字节编码可能存在字符跨块问题,可根据实际情况调整块大小或使用codepage的流式处理API

示例代码:

def convert_large_file(input_file, output_file, from_code, to_code) do
  input_stream = File.stream!(input_file, [], 4096) # 4KB分块
  output_stream = File.stream!(output_file, [:binary], 4096)

  input_stream
  |> Stream.map(&Codepage.from_string(&1, from_code))
  |> Stream.map(&Codepage.to_string(&1, to_code))
  |> Stream.into(output_stream)
  |> Stream.run()
end

关键注意点

  • 必须确认原文件的准确编码,不确定时可使用编码检测工具辅助判断
  • 提前查阅codepage包文档,确认目标编码是否被支持
  • 转码后建议抽样验证文件内容,避免因编码兼容问题导致乱码或字符丢失

内容的提问来源于stack exchange,提问作者Chen Yu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 08:45:29