BreezeSinfonia 2023/02/05 21:51

めんどすぎる改行の話

突然のクソなぞなぞ!

この2つの文章は違う箇所があります!ど~の改行だ?

正解はこの改行!

「上の文章の改行は\r\nだけど、下の文章は\nだけ!」でした!

バイナリエディタで見ると一目瞭然です。0Dが\rで0Aが\nだ!


本題

(改行文字を知らない人向け)
文字は文字でも、プログラムで扱う文字の中には制御文字と呼ばれる文字があります。
基本的には表示されない、プログラムが制御のための目印として扱う文字です。
さっき上がった\r, \nは改行を表す時に使う制御文字になります。

細かいあれこれはWikipediaを見てくれ!
改行コード - Wikipedia


Langscoreでの話

Langscore イズ 何 → Langscore


文章を扱うツールの性質上、どうしても改行からは逃れられません。

全部の改行が\r\nで表されるなら楽ちんなのですが、\r\nはWindowsの方言みたいなもので、Unix系のOS(Macとか)では\nだけで改行を表します。(超雑な括り)


しかもそれはあくまでOS上の話であって、アプリ毎にも扱いが違います。
Windows上で動いていても\nだけで改行を表せるアプリは当然あります。
メモ帳の改行は\r\n、Excelのセル内改行は\nと、この差もかなり厄介です。


例えば、Langscoreが絶賛対応中のツクールVX Aceでは、表示する文章ごとに改行コードが違っていました。


なんで場所ごとに改行が違うんじゃ、という話ですが、
前者は、説明文全部を1つのデータとして保持しています。
後者は、文章を一行ごとに分けてそれぞれを1つのデータとして保持しています。
そのまま表示するか、一回結合してから表示するかの違いがあり、そういう差から改行文字が違っていると思われます。


この改行がどう問題になるかというと、「2つの文章が完全一致するか調べる時」です。
\r, \nも1文字として扱われるので、当然「から\r\nあげ」と「から\nあげ」では完全一致とはなりません。


Langscoreでは「ツクール側が表示しようとしている文章」と、「翻訳データ内の原文章」を比較して該当の翻訳文章を引っ張り出しています。

そのため翻訳データを作る時に改行の扱いをミスると、それはもう悲惨で厄介なことに……
なっちゃったんですけどね……

上図のような処理を行っているのですが、この場合では結果、翻訳文が見つかりません。
流石にクラッシュはしませんが、英語で表示したいのに何故か日本語でしか表示されない!翻訳されてない!という事になります。


なお、この辺りのバグは当然取り除いています。また幸いにも、VXAceではどのファイルに\r\nが使われているか、というパターンが決まっているので、改行文字がパターンから外れている場合は修正する処理を入れています。


結論

改行はめんどくさい!厳密に改行と向き合う時はちゃんと調べてから処理を組もうね!
ほんとごめんなさい……バグバグでマジでごめんなさい……ホントマジ……



というわけで、バグりがちな箇所の言い訳でした。
またもやキャプチャを使用させて頂いた、同人R-18RPG"Kingexit"はこちら!

でかいサムネ使っておっぱいくらい見えてもええやろとも思いましたが、なんてったって全年齢向け記事なので小さいアイコンです。
めっちゃ良いゲームなので、大人のみんなはぜひ買ってくれな!

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

最新の記事

月別アーカイブ

限定特典から探す

記事を検索