FIRST CH TOOLS / 11 ENCODING CONVERTER

Encoding & Line Ending Converter

Detects and converts the character encoding (Shift_JIS / UTF-8), BOM and line endings (CRLF / LF / CR) of CSV and text files. Handy for diagnosing garbled CSVs and for writing BOM-prefixed UTF-8 that Excel opens correctly.

Drag & drop a file, or paste text below

Load the file itself to inspect line endings. Text pasted into the box has its newlines normalised to LF by the browser, so CRLF cannot be detected.

Encoding
BOM
Line endings
0
Bytes
0
Characters

Convert

Output is UTF-8 only. Encoding to Shift_JIS is not supported: the browser's TextEncoder cannot do it and a full mapping table would be required. Reading and decoding Shift_JIS input is supported.

How to Use

  1. Load a fileDrag & drop or choose a file. Encoding, BOM and line endings are detected automatically.
  2. Check the previewIf the text looks garbled the detection may be wrong — judge from the preview.
  3. Convert and downloadPick the line endings and BOM, then download. Everything runs in your browser.

About This Tool

Garbled Japanese CSVs almost always come down to two things: Shift_JIS being read as UTF-8 (or vice versa), and a missing BOM. Excel tends to read BOM-less UTF-8 CSVs as Shift_JIS, so simply adding a BOM often fixes it. Mixed CRLF/LF line endings are a common cause of whole-file diffs in Git.

Detection checks whether the bytes are valid UTF-8 and falls back to Shift_JIS otherwise. Japanese CSVs are in practice one of these two, so narrowing the candidates reduces false positives. Other encodings such as EUC-JP are not supported.

From AI Agents

The encoding / BOM / line-ending detection and conversion logic behind this tool is also available as the encoding_convert tool of the MCP (Model Context Protocol) server @first-ch/tools-mcp, so AI agents can call it without a browser. See Using these tools from AI agents for setup.

Setup

claude mcp add firstch-tools -- npx -y @first-ch/tools-mcp

Example calls

# Detect only
encoding_convert(text="text", mode="analyze")

# Convert to UTF-8, LF endings, no BOM
encoding_convert(
  base64="<base64>", mode="convert",
  newline="LF", bom=false)

Other Tools