
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.

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.


