改行コードの表示について質問

  1. どうも世話になってます
    某ソフトにAIで表示された文字をコピーして貼ると改行無しの一行表示になるので調べると
    改行コードがLFになってました
    (某ソフトに聞くと改行コードLF非対応)
    Meryに貼るとCR+LFなので気づかなかったのですが他のエディタに貼るとLFでした
    AIで調べるとAIが生成するコードは基本的に LF(\n) なので、貼り付けるとそのままLFになります。
    とのこと
    Meryに貼ってから某ソフトに貼ると正常でした
    Meryでは自動的にCR+LFに変換されてるのでしょうか
    ステータスバーの4つ目(行、列の右)が改行コードですよね
    よろしくお願いします。

     |  kiyohiro  |  返信
  2. ご愛用いただきありがとうございます。

    某ソフトが何なのか分からないため、こちらでは検証できないのですが、一般的な動作としてご説明しますね。

    > Meryでは自動的にCR+LFに変換されてるのでしょうか

    ざっくり言うと、「自動的に変換されている」と考えていただいて大丈夫です。

    Mery の改行コードの仕様についてご説明します。

    まず、Mery にコピペした時点では、改行コード (CR+LF や LF など) をそのままのかたちで保持しているわけではありません。

    たとえば、CR+LF のテキストを貼り付けた場合でも、そのまま CR+LF のデータを内部に持っている、というイメージではありません。

    > ステータスバーの4つ目(行、列の右)が改行コードですよね

    4つ目はカーソル位置の文字コードですね。

    現在の改行コードはステータスバーの6つ目で、「CR+LF (Windows)」と表示されている部分になります。

    Mery では、ファイルを保存するときやコピーするときに、その時点で設定されている改行コードに自動的に変換しています。

    たとえば、ステータスバーの6つ目の表示をダブルクリックして「LF (UNIX)」に変更しても、その操作でデータ自体が変換されるわけではありません。

    その状態でコピーすると、テキストは LF の改行コードとしてクリップボードにコピーされます。

    また、同様の操作で「CR+LF (Windows)」に戻すこともでき、これらの操作によってデータ自体が変更されることはありません。

    このように、内部で改行コードをそのまま保持しているというよりは、「出力のタイミングで改行コードを適用している」という仕組みになっています。

    この仕様のため、副作用として改行コードが混在したテキストは扱えず、保存時などに自動的に統一されます。

    実際には、あえて改行コードが混在したテキストを扱う必要があるケースよりも、混在に気づかず困るケースのほうが多いため、それを防ぐ目的もあって、こういった仕様になっています。

    ちょっとわかりにくい仕様ですが、ご不明な点がありましたらお気軽にどうぞ。

     |  Kuro  |  返信
  3. 回答ありがとうございます
    >某ソフトが何なのか分からないため、こちらでは検証できないのですが、
    INASOFTさんのマウスのお供 ver.1.68.05です
    Meryのマクロがうまく行ったので
    マウスのお供のFR-ScriptをAIで作ってましたがAIから貼り付けると
    一行表示になり原因がわからず困ってました。
    ちなみにここのフォーラムやマクロライブラリのコードブロックのコピーも
    LFなんですね
    他のエディタに貼り付けて今回始めて気づきました。

    > Meryでは自動的にCR+LFに変換されてるのでしょうか
    仕様なんですね分かりました。

    ちなみに今回の様に保存せず新規作成に一時的に文字列を貼り付けた場合の
    改行コードを確認の場合どうすればいいのでしょうか

    >4つ目はカーソル位置の文字コードですね。
    文字コードは分かってましたが
    改行の所でCR+LFとでてるのでここで確認してました
    CR+LF (Windows)の部分はドロップしたテキスト全体の改行コードと認識してました
    LFのテキストをドロップするとちゃんとLF (UNIX)になるので

     |  kiyohiro  |  返信
  4. ご返信ありがとうございます。

    なるほど、「マウスのお供」、少し試してみましたが、面白いソフトですね。

    > ちなみにここのフォーラムやマクロライブラリのコードブロックのコピーもLFなんですね
    > 他のエディタに貼り付けて今回始めて気づきました。

    こちらでもフォーラムやマクロライブラリのコピーを試しましたが、普通に CRLF でコピーされました。

    もしかすると、クリップボードの内容を変換するようなアプリが動作している可能性も考えられます。

    > ちなみに今回の様に保存せず新規作成に一時的に文字列を貼り付けた場合の改行コードを確認の場合どうすればいいのでしょうか

    改行コードの確認は、ステータスバーの6つ目の表示が基本です。ここで現在の改行コード (CR+LF や LF) が確認できます。

    ただし、貼り付けた文字列そのものの改行コードを「そのままのかたち」で確認することは、残念ながら Mery ではできません。

    どうしても元の改行コードをそのまま確認したい場合は、改行コードの混在にも対応しているテキストエディター (サクラエディタさん) をご利用いただくのが良いかと思います。

     |  Kuro  |  返信
  5. 回答ありがとうございます
    >こちらでもフォーラムやマクロライブラリのコピーを試しましたが、普通に CRLF でコピーされました。
    こちらもサクラエディタで試したのですが
    https://imgur.com/BxdR1lU
    サクラエディタに貼るとLFみたいですが
    今回確認用に入れたので見方が間違ってるだけかもです

    >どうしても元の改行コードをそのまま確認したい場合は
    自身のWindowsクリップボード内容表示マクロがあるので改造することにしました
    しばらく確認してマクロライブラリに追加します

    #language = "quickjs"
    #title="Windowsクリップボード内容表示(改行コード可視化+空文字対応+タブ可視化)"
    
    // clipboardData オブジェクトを使用してテキストを取得します
    var sClip = clipboardData.getData("Text");
    
    if (sClip != null) {
        // mePromptMultiline を指定して、複数行の編集・コピー可能なボックスを表示
        // 第2引数に取得したテキストをセットします
    
        // 改行コード・タブを可視化
        // まず CRLF を処理 → 次に単体CR → 最後にLF
        var sView = sClip
            .replace(/\r\n/g, "\\r\\n\n")  // CR+LF Windows改行
            .replace(/\r/g, "\\r\n")      // CR 古いMac
            .replace(/\n/g, "\\n\n")      // LF Unix系
            .replace(/\t/g, "\\t");       // タブ
    
        prompt("クリップボードの内容(ここから編集・コピーが可能です(改行はCtrl+Enter)):", sView, mePromptMultiline);
    } else {
        // クリップボードが空、またはテキストデータでない場合
        alert("クリップボードにテキストが見つかりませんでした。");
    }
    
    
     |  kiyohiro  |  返信
  6. >こちらでもフォーラムやマクロライブラリのコピーを試しましたが、普通に CRLF でコピーされました。
    原因が分かりました
    普段使ってる
    FirefoxだとLF
    試しに
    EdgeだとCRLF
    になりました。

     |  kiyohiro  |  返信
  7. 修正しました
    取り敢えずこれで今回の件解決しました
    色々説明ありがとうございます助かりました。

    #language = "quickjs"
    #title="Windowsクリップボード内容表示(改行コード可視化+空文字対応+タブ可視化)"
    
    var sClip = clipboardData.getData("Text");
    
    if (typeof sClip === "string" && sClip.length > 0) {
    
        // 改行コード・タブを可視化(表示用に改行も維持)
        var sView = sClip
            .replace(/\r\n/g, "\\r\\n\n") // CRLF → 表示+改行維持
            .replace(/\r/g, "\\r\n")     // CR → 表示+改行維持
            .replace(/\n/g, "\\n\n")     // LF → 表示+改行維持
            .replace(/\t/g, "\\t");      // タブ
    
        prompt(
            "クリップボードの内容(ここから編集・コピーが可能です(改行はCtrl+Enter)):",
            sView,
            mePromptMultiline
        );
    
    } else {
        alert("クリップボードにテキストが見つかりませんでした。");
    }
    
    
     |  kiyohiro  |  返信
  8. ご返信ありがとうございます。

    なるほど、こちらでも Firefox をインストールして試してみたところ、LF になっていることを確認できました。

    Chrome や Edge では CRLF になるようですね。

    このフォーラムや MeryWiki は Linux 上で動いているため、内部的には改行コードは LF になっていますが、Chrome や Edge は Windows 向けに CRLF に変換してくれているようです。

    Firefox はそのままのデータを扱う仕様なのか、Web から渡された文字列を変換せずに保持しているのかもしれませんね。

     |  Kuro  |  返信
スポンサーリンク