Convert a Shift-JIS Manuscript to UTF-8 on Mac with a Reversible Record

An immutable Shift-JIS source and separate UTF-8 copy are compared across five properties

Convert a standard SHIFT_JIS manuscript to UTF-8 on a Mac by preserving the source and naming both encodings explicitly. This article owns the concrete reversible route and before/after values. It does not compare apps, perform the initial BOM audit, or classify every save accident.

The route below uses the general macOS iconv command, not a verified Stage 4 Rune Studio workflow. If the input is Windows-31J / CP932 or Shift_JIS-2004, do not relabel it as SHIFT_JIS; confirm the exact source encoding in a separate workflow.

Separate source, working input, and UTF-8 output

Use source-original.txt, source-working.txt, and manuscript-utf8.txt. Confirm that the original and working input match, then record the original hash.

shasum -a 256 source-original.txt
cmp source-original.txt source-working.txt

Stop if cmp reports a difference. All later reads use the working input, and the original hash must remain unchanged.

Validate the declared input before producing output

iconv -f SHIFT_JIS -t UTF-8 source-working.txt >/dev/null

An error means that the declared encoding may be wrong or the bytes are not valid under standard SHIFT_JIS. Stop instead of guessing another encoding and overwriting the file. Success means convertible as standard SHIFT_JIS, not editorial proof that every character has the intended meaning.

Write a separately named UTF-8 output

iconv -f SHIFT_JIS -t UTF-8 source-working.txt > manuscript-utf8.txt
iconv -f UTF-8 -t UTF-8 manuscript-utf8.txt >/dev/null

The first command fixes input and output encodings. The second validates the generated UTF-8 bytes. In production, also ensure that the output path is unused before running the command.

Use measured before-and-after control values

The control text is:

第一章
「校正開始」

Measured with macOS iconv on August 11, 2026:

Field SHIFT_JIS input UTF-8 output
Byte count 20 29
SHA-256 66f8cc846210710fa956a4e42396b43a80ec5ca67df9b22aaa49a14da2342e78 2a76f1851bcd10dba3f725c5f4e49d73ccf6055370d5ab90083fade519ecb760
Leading bytes 91 e6 88 ea 8f cd e7 ac ac e4 b8 80
Hash after converting UTF-8 back to SHIFT_JIS — 66f8cc846210710fa956a4e42396b43a80ec5ca67df9b22aaa49a14da2342e78

Encoding changes bytes, so input and output hashes should differ. Verify reversibility by converting the UTF-8 output back and comparing it with the working input:

iconv -f UTF-8 -t SHIFT_JIS manuscript-utf8.txt | cmp - source-working.txt

No cmp difference proves the round trip for this input. Stop and seek a separate approval when unconvertible characters or normalization decisions are involved.

If cmp reports a difference, reject the output and record source-encoding, conversion-error, and normalization questions separately. Do not stack another conversion on the changed output.

Compare representative passages as text

Select one passage each from the beginning, middle, and end, then confirm that the UTF-8 output shows the same strings. Byte counts alone cannot rule out a substitution. Record source hash, output hash, byte counts, round-trip cmp, and the three passage checks.

BOM and newline policy remain separate specification fields. They are not silently folded into the conversion result.

Limit the Rune Studio claim to preflight

Stage 3 materials confirm major Japanese encoding detection, red highlighting of unconvertible characters, and automatic-save blocking while an issue remains. Those features can support preflight.

There is no Stage 4 evidence that Rune Studio completed the command route above. The 20-to-29-byte result and round-trip values are general command measurements, not product performance claims.

Rune Studio editor with UTF-8 and LF shown in the status area
The status area shows UTF-8 and LF for the open manuscript. This is the selected value; whether the saved bytes match is checked separately.

Expand only after one chapter round-trips

Hand off one chapter only when the original hash is unchanged, the UTF-8 output is valid, round-trip cmp has no difference, and all three passages match. STUDIO-029 owns candidate comparison, STUDIO-521 owns pre-change byte observation, and STUDIO-146 owns manuscript approval at the EPUB boundary.