User Rating 0.0
Total Usage 0 times
Characters: 0
Characters: 0
Is this tool helpful?

Your feedback helps us improve.

About

Traditional Chinese, Japanese, and Korean texts use vertical writing (直書, tategaki): columns flow top-to-bottom, ordered right-to-left. Modern digital systems default to horizontal writing (橫書, yokogaki): rows flow left-to-right, top-to-bottom. Converting between these layouts is not a simple transpose. Column padding, punctuation orientation, and fullwidth character alignment must be preserved. A naive approach that ignores trailing whitespace or mixes halfwidth Latin characters with fullwidth CJK glyphs produces broken output with misaligned columns. This tool implements the correct padding and reading-order logic, plus bidirectional fullwidth - halfwidth conversion using the Unicode offset 0xFEE0 between codepoint ranges U+FF01 - U+FF5E and U+0021 - U+007E.

Limitations: vertical output is a monospaced text approximation. True vertical rendering requires CSS writing-mode properties. This converter produces the traditional plain-text column format used in terminals, print typesetting, and legacy systems where CSS is unavailable. Punctuation rotation (e.g., turning 「」 brackets) is not applied; the tool preserves original codepoints. For mixed CJK-Latin text, halfwidth Latin characters occupy half the width of fullwidth CJK characters, which may cause column misalignment in non-monospaced fonts.

chinese text converter vertical writing horizontal writing 直書 橫書 fullwidth halfwidth CJK text tool chinese writing style

Formulas

The fullwidth-to-halfwidth conversion relies on a constant Unicode offset. For any fullwidth character Cfw in the range U+FF01 - U+FF5E, the corresponding halfwidth character Chw is computed as:

Chw = Cfw 0xFEE0

For the ideographic space U+3000, the mapping is a special case to ASCII space U+0020. The reverse (halfwidth to fullwidth) applies the inverse addition.

The horizontal-to-vertical algorithm distributes N characters across columns of height h. The number of columns c required is:

c = ceil(Nh)

Characters are placed column-first: character at index i goes to column j = floor(i ÷ h) and row r = i mod h. Output rows are then printed with columns ordered right-to-left (reversed) to match traditional reading order.

The vertical-to-horizontal algorithm reverses this process. Each input line is treated as a row of the column grid. Characters are read by iterating columns (right-to-left in the source, meaning last character index to first per row) and then rows (top-to-bottom), reconstructing the original linear text stream. Trailing padding spaces (fullwidth U+3000 or halfwidth U+0020) are stripped.

Where Cfw = fullwidth character codepoint, Chw = halfwidth character codepoint, N = total character count, h = column height, c = number of columns, i = character index, j = column index, r = row index.

Reference Data

Character TypeHalfwidth RangeFullwidth RangeOffsetExample HalfExample Full
Exclamation - TildeU+0021 - U+007EU+FF01 - U+FF5E0xFEE0A
SpaceU+0020U+30000x2FE0(space)(ideographic space)
Digits 0-9U+0030 - U+0039U+FF10 - U+FF190xFEE05
Latin UppercaseU+0041 - U+005AU+FF21 - U+FF3A0xFEE0Z
Latin LowercaseU+0061 - U+007AU+FF41 - U+FF5A0xFEE0z
CJK Unified IdeographsU+4E00 - U+9FFFN/A (already fullwidth) -
CJK PunctuationU+3000 - U+303FN/A - 、。〈〉
Halfwidth KatakanaU+FF65 - U+FF9FU+30A1 - U+30F6Variable
Hangul Compatibility JamoU+FFA0 - U+FFDCU+3131 - U+3163Variable
Fullwidth Won SignU+20A9 (₩)U+FFE6 (₩)0xDF3D
Vertical Writing DirectionTop→Bottom, Right→Left (columns)直書
Horizontal Writing DirectionLeft→Right, Top→Bottom (rows)橫書
CSS writing-mode: vertical-rlNative browser vertical renderingCSS3
CSS writing-mode: horizontal-tbDefault browser horizontal renderingCSS3
Ideographic Space WidthEqual to one CJK character width (1em) 

Frequently Asked Questions

Vertical plain-text output relies on monospaced font rendering where every character occupies the same width. CJK characters are inherently fullwidth (occupying 2 columns in terminal emulators), while Latin letters and ASCII punctuation are halfwidth (1 column). If your input mixes CJK and Latin characters, columns will misalign in proportional fonts. Use a monospaced font like Noto Sans Mono CJK, Source Han Mono, or Consolas to view the output correctly. Alternatively, convert halfwidth characters to fullwidth first using the Halfwidth → Fullwidth mode before converting to vertical.
The column height (h) determines how many characters appear per column from top to bottom. Traditional printed vertical text typically uses 20-40 characters per column depending on page size. A shorter h produces more columns (wider layout), while a taller h produces fewer columns (narrower layout). The tool defaults to 10 characters. For the classic novel format, values between 20 and 30 are common. The final column may contain fewer characters and is padded with ideographic spaces (U+3000) to maintain rectangular alignment.
No. In proper vertical typesetting, certain punctuation marks rotate 90° (e.g., the period 。 moves from bottom-center to right-center, dashes become vertical). This rotation is a glyph-level operation handled by font engines and CSS writing-mode: vertical-rl, not by changing Unicode codepoints. This tool produces a plain-text column layout without altering character codepoints. The punctuation will appear in its horizontal-orientation glyph. For true vertical typesetting with rotated punctuation, use CSS writing-mode on an HTML element.
Newlines in the input are stripped during horizontal-to-vertical conversion. The tool treats the entire input as a continuous character stream (after removing line breaks), then distributes characters into columns. This matches the traditional behavior where horizontal paragraphs are reflowed into vertical columns. If you need to preserve paragraph breaks, insert a visual separator character (e.g., ※ or a blank line marker) before converting.
Yes. The vertical-to-horizontal algorithm does not require knowing the original column height parameter. It reads the vertical grid structure directly from the input: each line of text represents one row, and the number of characters per line determines the number of columns. It reads columns from right to left (last character to first per row), top to bottom, and concatenates to reconstruct horizontal text. Trailing padding spaces are stripped automatically. The only requirement is that the vertical text maintains its rectangular grid structure with consistent line lengths.
Unicode defines compatibility characters in the Halfwidth and Fullwidth Forms block (U+FF00 - U+FFEF). Fullwidth characters occupy the same width as CJK ideographs (roughly a square em), while halfwidth characters occupy half that width. Historically, East Asian computing systems used fullwidth ASCII (e.g., A at U+FF21 instead of A at U+0041) for visual consistency with CJK text in fixed-width grids. The conversion offset between fullwidth ASCII and standard ASCII is exactly 0xFEE0 (65,248 decimal). The ideographic space U+3000 is a separate special case mapping to U+0020.