tag:crieit.net,2005:https://crieit.net/tags/%E6%96%87%E5%AD%97%E5%8C%96%E3%81%91/feed 「文字化け」の記事 - Crieit Crieitでタグ「文字化け」に投稿された最近の記事 2022-04-29T23:58:08+09:00 https://crieit.net/tags/%E6%96%87%E5%AD%97%E5%8C%96%E3%81%91/feed tag:crieit.net,2005:PublicArticle/18180 2022-04-29T23:58:08+09:00 2022-04-29T23:58:08+09:00 https://crieit.net/posts/mojibake-pdf-20220501 PDF からテキストをコピペしたときに稀に見られる潰れた文字のメモ <p>あるとき、エディタ上で「入」の文字が化けてしまって困ったので原因を探ったのでメモしておきます。</p> <h2 id="経緯"><a href="#%E7%B5%8C%E7%B7%AF">経緯</a></h2> <p>エディタ上でファイル名をコピペしたら「入」の文字が化けてしまいました。エクスプローラ上で見ると一見普通の「入」の文字のように見えたのですが……。</p> <p><a href="https://crieit.now.sh/upload_images/872413ab26ee95ba2c1f3249702a580f626bfc86aeb9e.jpg" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/872413ab26ee95ba2c1f3249702a580f626bfc86aeb9e.jpg?mw=700" alt="左が文字化けした入、右が手入力した入" /></a></p> <p>メモ帳に貼り付けたところ、明らかに様子がおかしいことに気付きました。</p> <p>左が文字化けした「入」、右が手入力した「入」です。</p> <p>何故か今回文字化けした「入」は半分くらいに潰れていますね……。字形が異なるということは、もちろん、文字コードも別です。ユニコードで見ると左が <code>\u2F0A</code> 、右が <code>\u5165</code> です。</p> <p>何でしょうこれ……。</p> <h2 id="調査"><a href="#%E8%AA%BF%E6%9F%BB">調査</a></h2> <p>調べてみると、他にもこうした文字があることが分かりました。</p> <pre><code>⼊入 ⼈人 ⻄西 ⾃自 ⾞車 ⼒力 ⼿手 ⾮非 ⼤大 ⼯工 </code></pre> <p>今回採集した例が上述。</p> <p><a href="https://crieit.now.sh/upload_images/a676d153f7a87ba4255ed1b6400ec489626bfc9218be3.jpg" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/a676d153f7a87ba4255ed1b6400ec489626bfc9218be3.jpg?mw=700" alt="半分潰れたような文字の採集結果" /></a></p> <p>メモ帳で見るといずれも半分くらいの大きさに潰れています。エクスプローラで見るとほとんど違いが分からないのですが、先述の通り文字コードが別なのでファイル名はしっかり別物と認識されます。</p> <p>そのため、同じファイル名が複数あるように見えるというなかなか<del>面白い</del>困った状況に陥ります。</p> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://logmi.jp/tech/articles/324366">PDFをコピペするとなぜ“文字化け”が起きてしまうのか 変換テーブル“ToUnicode CMap”が原因だった - ログミーTech</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://logmi.jp/tech/articles/324412">PDFに文字化けを起こさせない対策法 もらったファイルは正規化で、作成ツールは対応済みを使え - ログミーTech</a></li> </ul> <p>さらに調べた結果、原因が判明しました。原因は PDF でした。</p> <ul> <li>PDFの中のテキストは文字コードとは別の固有の番号で文字を出力しているが、Unicodeのような文字コードとは互換性はない</li> <li>一応文字コードとPDF固有の番号の変換テーブルはある</li> <li>が、この変換テーブルがない PDF が存在する</li> <li>そうした場合、昇順で文字を参照するが本来の文字ではなく部首に当たる文字が先にヒットしてしまう</li> <li>この部首に当たる文字が先の半分潰れたような文字の正体</li> <li>結果、コピペ等 PDF の中からテキストを抜く際に本来の文字ではなく、部首に当たる文字が抜き出される。その文字は通常の文字ではないため、一部の環境では化ける</li> </ul> <p>ざっくり言うとこんな感じの原因の模様。確かに、今回のケースでも PDF の中から見出しのテキストをコピペしてファイル名にしていました。その際に先の条件に当てはまり、通常の <code>入</code> ではなく、 <code>⼊</code> を混入させてしまった、ということのようです。</p> <p>原因が分かれば納得ですが、なんと面倒な……。</p> <h2 id="参考"><a href="#%E5%8F%82%E8%80%83">参考</a></h2> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://logmi.jp/tech/articles/324366">PDFをコピペするとなぜ“文字化け”が起きてしまうのか 変換テーブル“ToUnicode CMap”が原因だった - ログミーTech</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://logmi.jp/tech/articles/324412">PDFに文字化けを起こさせない対策法 もらったファイルは正規化で、作成ツールは対応済みを使え - ログミーTech</a></li> </ul> <h3 id="(余談)"><a href="#%28%E4%BD%99%E8%AB%87%29">(余談)</a></h3> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://qiita.com/libraplanet/items/68a3e6b4a3942c83db50">「文字コードを自動判別する」と言う幻想を打ち砕く👊 - Qiita</a></li> </ul> <p>今回の件とは別件ですが、まあ文字コードがらみは厄介ですよね、というお話。</p> arm-band tag:crieit.net,2005:PublicArticle/17909 2022-01-02T11:27:06+09:00 2022-01-02T11:27:06+09:00 https://crieit.net/posts/opts-utf8-off-in-ftp FTP で日本語ファイルが文字化けする場合の対処法 (FFFTP, WinSCP) <p>FTP でサーバにアップロードされている日本語ファイルを扱う際に注意すべき事項をメモしておきます。</p> <p>……そもそも基本的に日本語を含むマルチバイト文字をアップロードするのは宜しくないのですが、誤ってアップロードしてしまった際などの対処法として。</p> <p>ちなみに一度アップロードしたファイルはサーバによってはクライアントとサーバの文字コードの違いで正しく認識できず、名前の変更や削除すらできなくなってしまうこともあるので注意。</p> <h2 id="FFFTP"><a href="#FFFTP">FFFTP</a></h2> <p>まず FFFTP の場合。</p> <p>登録されている接続情報を選択して「設定変更」。</p> <p><a href="https://crieit.now.sh/upload_images/03532d6f05581eebaed1869f1376e85661d10cae6e13d.jpg" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/03532d6f05581eebaed1869f1376e85661d10cae6e13d.jpg?mw=700" alt="FFFTP で UTF-8 での転送をオフにする方法" /></a></p> <p>「拡張」タブを開き、「接続時にホストに送るコマンド」のテキストエリアに以下の文字列を入力。</p> <pre><code>OPTS UTF8 OFF </code></pre> <p>これで接続しなおすと文字化けしなくなります。</p> <h2 id="WinSCP"><a href="#WinSCP">WinSCP</a></h2> <p>次に WinSCP の場合。</p> <p><a href="https://crieit.now.sh/upload_images/277405ec94482f9de10d36d0e616301961d10cc95832c.jpg" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/277405ec94482f9de10d36d0e616301961d10cc95832c.jpg?mw=700" alt="WinSCP で UTF-8 での転送をオフにする方法" /></a></p> <p>セッションを繋ごうとした際に、右下の「設定」のドロップダウンから「設定」を選択。</p> <p>「高度なサイトの設定」ダイアログの中で、左のツリーから「環境」下の「FTP」を選択。</p> <p><a href="https://crieit.now.sh/upload_images/ae05d931526c5c5b222c469add3a111261d10cfc3d733.jpg" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/ae05d931526c5c5b222c469add3a111261d10cfc3d733.jpg?mw=700" alt="WinSCP で UTF-8 での転送をオフにする方法" /></a></p> <p>「ログイン コマンドの送信」のテキストエリアで FFFTP と同様に次のコマンドを入力。</p> <pre><code>OPTS UTF8 OFF </code></pre> <p>これでOK。</p> <h2 id="備考"><a href="#%E5%82%99%E8%80%83">備考</a></h2> <p>原因としては、サーバが対応していないのにクライアント側が UTF-8 で転送しようとすると文字化けを起こす模様。</p> <p>しかも Windows10 はデフォルトで UTF-8 で転送するよう</p> <pre><code>OPTS UTF8 ON </code></pre> <p>のコマンドを送るとのことので、より現象に遭遇しやすくなっているものと思われます。</p> <p>この辺で面倒になるので、サーバにはマルチバイト文字のファイル名は止めていただきたいのですよね。あと、スペースや特殊な記号を含むファイル名。</p> <h2 id="余談 (WinSCP)"><a href="#%E4%BD%99%E8%AB%87+%28WinSCP%29">余談 (WinSCP)</a></h2> <p>今回は効果がなかったですが別の方法を。</p> <p><a href="https://crieit.now.sh/upload_images/b423c134d9938fa8c6f29702ce200dba61d10d050fe06.jpg" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/b423c134d9938fa8c6f29702ce200dba61d10d050fe06.jpg?mw=700" alt="WinSCP で UTF-8 での転送をオフにする方法" /></a></p> <p>「高度なサイトの設定」ダイアログで「環境」を選択、「サーバ環境」の中の「ファイル名を UTF-8 でエンコード」を「オフ」にしても今回は効果がありませんでした。</p> <p>……項目の名前的に同じことをやっているような気がするのですが、何か差があるのでしょうか。</p> <h2 id="参考"><a href="#%E5%8F%82%E8%80%83">参考</a></h2> <h3 id="FFFTP"><a href="#FFFTP">FFFTP</a></h3> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://ponnao.com/?p=13858">[サーバ覚書]FTPソフトで日本語ファイルが文字化けする場合の対処 | ponnao-clip</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://www.sthark.com/spt/7769/">日本語ファイルが文字化けする場合の対処方法(FFFTP) - スターク ホスティング</a></li> </ul> <h3 id="WinSCP"><a href="#WinSCP">WinSCP</a></h3> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://faq.cpi.ad.jp/faq/show/101?category_id=35&site_domain=default">日本語のファイル名やディレクトリ名は利用できますか。 | よくあるご質問(FAQ) | CPIサポート</a></li> </ul> <h3 id="WinSCP (今回は効果がなかった)"><a href="#WinSCP+%28%E4%BB%8A%E5%9B%9E%E3%81%AF%E5%8A%B9%E6%9E%9C%E3%81%8C%E3%81%AA%E3%81%8B%E3%81%A3%E3%81%9F%29">WinSCP (今回は効果がなかった)</a></h3> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://www.3ryu-engineer.work/winscp-utf8/">簡単!WinSCPでファイル名が文字化けする原因と対応方法 - 3流なSEのメモ帳</a></li> </ul> <h3 id="Windows10 での仕様"><a href="#Windows10+%E3%81%A7%E3%81%AE%E4%BB%95%E6%A7%98">Windows10 での仕様</a></h3> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://social.technet.microsoft.com/Forums/ja-JP/0ae7f6a7-531c-4162-9870-fe7dfde23e82/winows101239112398ftp124671251012531124892345534892261781239825391?forum=win10itprogeneralJP">Winows10でのFTPコマンド実行時の振る舞いについて</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://teratail.com/questions/123844">FTP - ftpでファイルを自動ダウンロードしたい|teratail</a></li> </ul> <p>Windows 10 ではデフォルトで <code>OPTS UTF8 ON</code> (UTF-8 でファイル名を扱う) コマンドをサーバに送信してしまうため、対応していないサーバでは今回のような現象が発生してしまうようです。</p> <h3 id="RFC2640"><a href="#RFC2640">RFC2640</a></h3> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://www.ietf.org/rfc/rfc2640.html">https://www.ietf.org/rfc/rfc2640.html</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://docs.grapecity.com/help/secureftp-dotnet-4/Dart.Ftp~Dart.Ftp.Ftp~Encoding.html">Encoding プロパティ (Ftp)</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://www.ibm.com/docs/ja/zos/2.2.0?topic=ftp-utf-8-enabled-control-connection">UTF-8 使用可能制御接続 - IBM Documentation</a></li> </ul> <p>サーバが UTF-8 をサポートしている場合は <code>OPTS UTF8 ON</code> を送るよう RFC2640 で定義されている模様。</p> <h3 id="サーバ側 (proftpd)"><a href="#%E3%82%B5%E3%83%BC%E3%83%90%E5%81%B4+%28proftpd%29">サーバ側 (proftpd)</a></h3> <ul> <li><a target="_blank" rel="nofollow noopener" href="http://www.dt8.jp/cgi-bin/adiary/adiary.cgi/0580">Windowsエクスプローラで文字化けしないFTPサーバ - 色々日記(ざ・めも)</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://www.connectworks.jp/blog/ftp%E3%81%A7%E3%81%AE%E6%96%87%E5%AD%97%E5%8C%96%E3%81%91/">FTPでの文字化け | コネクトワークス</a></li> </ul> arm-band