Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

XML宣言を用いた文字コード判別処理を強化する #1422

Merged
merged 15 commits into from Oct 11, 2020
Merged

XML宣言を用いた文字コード判別処理を強化する #1422

merged 15 commits into from Oct 11, 2020

Conversation

ghost
Copy link

@ghost ghost commented Oct 3, 2020

PR の目的

XML宣言のencoding指定を使った文字コード判別処理を強化し、文字化けが発生する可能性を減らします。

カテゴリ

  • 不具合修正

PR の背景

XML宣言のencoding指定に未知のエンコーディング名が指定されていたとき、これをUTF-8として認識するバグがありました。
patchunicode#1050で提案されている修正パッチを取り込み、この問題を解決するものです。

PR のメリット

  1. XML文書のencoding指定に記述された(サクラエディタにとって)未知のエンコーディング名を新たに認識できるようになります。
    • この点はcodingの記述があるファイルやHTMLファイルのcharset属性に対する判別処理でも享受できます。
  2. エンコーディング名を認識できなかったとしても、自動判別によって文字化けを極力回避できるようになります。

PR のデメリット (トレードオフとかあれば)

  • 特にないと思います。

仕様・動作説明

このPRに含まれる変更は次の通りです。

  1. エンコーディング名のエイリアスを追加した
    • エイリアスや表記ゆれなど、エンコーディング名の定義を追加。
    • パッチに含まれている16個のほか、WHATWGのエンコーディング仕様書などから20個を選定。
  2. 認識できないエンコーディング名がXML宣言に記述されているときに、UTF-8として認識される問題を修正した
  3. XML宣言にencoding指定がない場合でも自動判別処理が行われるようにした
    • 自動判別で文字コードを決められないときは、XML仕様に基づきこれまで通りUTF-8として扱う。
  4. 取り込みの過程で見つけた問題点を修正した
  5. エンコーディング名「windows-1252」が2回定義されていたので一つにまとめた
  6. エンコーディング名の定義方法を変更した
    • レビューにて提案された変更です。
    • マクロENCODING_NAMEを定義して文字数を自動算出するように変更し、文字数の数え間違いによってエンコーディング名が認識されなくなる問題を防ぎます。

テスト内容

テスト1(追加したエイリアスを認識するか)

  1. テストファイルのうち01~04を開き、文字化けが発生していないか確認する
  2. ステータスバーの文字コード表示が正しいか確認する
    • テストファイル01:SJIS
    • テストファイル02:EUC
    • テストファイル03及び04:JIS

テスト2(未知のエンコーディング名のとき)

  1. テストファイル05を開き、文字化けが発生していないか確認する
  2. ステータスバーの文字コード表示が「SJIS」であるか確認する

テスト3(encoding指定がないとき)

  1. テストファイル06を開き、文字化けが発生していないか確認する
  2. ステータスバーの文字コード表示が「UTF-8」であるか確認する

テストファイルの説明

テストファイル.zip

  • テストファイル_01.xml
    • Shift_JISのファイルで、新たに追加した名称(sjis)をXML宣言のencodingに指定
  • テストファイル_02.txt
    • EUC-JPのファイルで、新たに追加した名称(cseucpkdfmtjapanese)を1行目の# codingに指定
  • テストファイル_03.html
    • ISO-2022-JPのHTMLファイルで、新たに追加した名称(csiso2022jp)をcontent属性のcharsetに指定
  • テストファイル_04.html
    • ISO-2022-JPのHTMLファイルで、新たに追加した名称(iso2022jp)をcharset属性に指定
  • テストファイル_05.xml
    • Shift_JISのファイルで、XML宣言のencodingに未知の名称(shifutojisu)を指定
  • テストファイル_06.xml
    • UTF-8(BOMなし)のファイルで、XML宣言のencoding指定を省略

PR の影響範囲

  • 次のファイルを開く際の文字コード判別処理
    • XML
    • codingの記述があるファイル
    • HTML(http-equiv属性またはcharset属性でエンコーディング名の指定があるもの)

関連 issue, PR

BugReport/195
patchunicode#1050
#1418

参考資料

@AppVeyorBot
Copy link

Build sakura 1.0.3131 completed (commit 6f4e9bbbe8 by @kazasaku)

// { "utf-7", 5, CODE_UTF7 },
// { "csutf7", 6, CODE_UTF7 },
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

コメントを追加する意味ってあります?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

既存の記述に合わせています。

すぐ上の"utf-7"もコメントになっていますが、encodingNameToCode配列を新規追加したpatchunicode:#726の時点でコメントになっています。
(当該コミットは d2311e8
何か理由があってUTF-7を判定対象外にしているのではないかと思っています。

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

何か理由があってUTF-7を判定対象外にしているのではないかと思っています。

UTF-7のエンコーディング仕様はかなり複雑なので、自称UTF-7を鵜呑みにすると文字化けします。
https://ja.wikipedia.org/wiki/UTF-7

windowsには utf-7 と utf16le を相互変換する機能がありますが、サクラエディタでは UTF-7 コーデックを自作しています。自称 UTF-7 を UTF-7 の自作クラスで扱った場合に文字化けが起こるのを嫌って除外してあるんじゃないかと想像していますが、それでもコメントアウトにする(=なかったことにする)の対応でいいのかは疑問です。コードの意図としては、エンコードが指定されていないと見做す(≒UTF8と看做す)がしたいわけではなく、AUTODETECTしたいはずなので想定結果がブレちまいます・・・。

return static_cast<ECodeType>(encodingNameToCode[k].nCode);
}
}
for(k = i; pBuf[k] != quoteChar && k < nSize - 1; ++k){}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

本来はループの外でやるべき判定を外に出す変更のようですね、良いと思います。
std::find_first_of を使うと処理の意味が明確になる気がしますが単に好みの話かもしれません…。

This comment was marked as outdated.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

文脈からMatchEncodingに分けた方を指していると誤解していました。失礼しました。
終点の引用符を探す処理、ループで行うよりはその方が分かりやすいと思います。
変更を入れておきます。

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

本来はループの外でやるべき判定を外に出す変更

その視点で再考するとAutoDetectByCodingにこの変更を使わないのは変ですね。
これも変えておこうと思います。

sakura_core/charset/CESI.cpp Outdated Show resolved Hide resolved
@@ -1226,6 +1277,10 @@ ECodeType CESI::CheckKanjiCode(const char* pBuf, size_t nBufLen) noexcept
if( nret != CODE_NONE && GetStatus() != ESI_NODETECTED ){
return nret;
}
if( GetMetaName() == CODE_AUTODETECT ){
// 2016.04.05 MetaがAUTODETECTの場合は、encodingがないxml文書。XML仕様書の通りUTF-8にする
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

個人的には元パッチに日付が付いていたからと言って、PRにする際にそれを残す必要は無いと思います。
意図的に残したいという事であれば反対はしませんが…。

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

おいらの気が確かなら、「XML仕様の通りUTF-8にする」は誤解を招く表現かもです。

コンテキスト的にはUTF-8で正しいと思うんですけどね。

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

従前の動作からすると、「これまで通りUTF-8とみなす」のほうが正しいような。
…とりあえずコメントの更新を入れておきます。

@beru beru added the 🐛bug🦋 ■バグ修正(Something isn't working) label Oct 3, 2020
@@ -501,11 +501,11 @@ void CESI::GetEncodingInfo_meta( const char* pS, const int nLen )
{
// XML宣言は先頭にあるので、最初にチェック
ECodeType encoding = AutoDetectByXML( pS, nLen );
if( encoding == CODE_NONE ){
if( encoding == CODE_NONE || encoding == CODE_AUTODETECT ){
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

この変更の妥当性にちょっと疑問があります。

こういうことなんじゃないかと。

// XML/HTML は自動判別と仮定する
bool altered = false;
if( encoding == CODE_NONE ){
    encoding = CODE_AUTODETECT;
    altered = true;
}
// 従来の判定文をちょっと変える
if( encoding == CODE_AUTODETECT ){
    ....(省略)
}
// 判別後に状態が変わって無かったら NONE に戻す
if (altered && encoding == CODE_AUTODETECT ){
    encoding = CODE_NONE;
}

で、その変更意味あるの?と言われると、ないかも知れない・・・なんですが。

This comment was marked as outdated.

This comment was marked as outdated.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

この指摘は一旦スルーして進めて構わんです。

たぶん、パッチの作成方針に根本的な問題があるっす。

CESI::GetEncodingInfo_meta というメンバー関数は m_eMetaName( == GetMetaName() ) を初期化するんですけど、この関数の結果を使っていいのは、BOMなしのマルチバイト文字コードのときだけな気がします。

文字コード 先頭数bytes 備考
UTF-8(UTF-8BOM) "\xef\xbb\xbf" xmlかどうかに関わらず確定してOKなはず。
UTF-16(UTF-16LE+BOM) "\xfe\xff" xmlかどうかに関わらず確定してOKなはず。
UTF-16(UTF-16BE+BOM) "\xff\xfe" xmlかどうかに関わらず確定してOKなはず。
UTF-16(UTF-16BE) "\0<\0?\x00x\0m\0l" encoding指定に関わらず確定してOKなはず。
UTF-16LE "<\0?\x00x\0m\0l\0" encoding指定に関わらず確定してOKなはず。
encoding依存 "<?xml" encoding指定が認識できる場合、それに従う。
タイプ別設定依存 "<?xml" デフォルトエンコーディングに従う ※1

※1 encoding指定がない、または、認識できない場合、かつ、タイプ別設定でデフォルトエンコーディングが指定されている場合は指定されたデフォルトエンコーディングで確定する。デフォルトエンコーディングがない場合、UTF-8とする。

CESIクラスはタイプ別設定のデフォルトエンコーディング情報を持っています。
判定条件を精査すると AUTODETECT を返すべきパスはないことが分かります。

でもま、旧パッチ適用していまある問題を解決しようぜ! がこのPRの趣旨だと思うのでこのままマージに向かってもよいと思います。

@k-takata
Copy link
Member

k-takata commented Oct 3, 2020

  1. エンコーディング名「windows-1252」が2回定義されていたので一つにまとめた
	{ "windows-1252", 12, CODE_LATIN1 },
...
	{"windows-1252",      12,  1252},

latin1 (ISO-8859-1) と windows-1252 (CP1252) は本来別で、windows-1252 は latin1 のスーパーセットなのですが、サクラエディタではどちらも windows-1252 として扱ってるんですかね?

@ghost
Copy link
Author

ghost commented Oct 3, 2020

latin1 (ISO-8859-1) と windows-1252 (CP1252) は本来別で、windows-1252 は latin1 のスーパーセットなのですが、サクラエディタではどちらも windows-1252 として扱ってるんですかね?

ISO-8859-1とWindows-1252では、0x80から0x9fの範囲が異なっていますが、それ以外は共通だったと思います。
しかし、この判定処理では定義順のせいでwindows-1252をCODE_LATIN1と判定しています。

ただ、CODE_LATIN1のときに使用されるCLatin1::Latin1ToUni関数は、0x80~0x9fの場合にMultiByteToWideChar関数を呼び出しており、第1引数にコードページ「1252」を指定しています。
一方の1252のときはCCodePage::CPToUniで変換処理を行いますが、こちらはMultiByteToWideChar2関数を使っていて、第1引数に呼び出し元から渡されたコードページを指定しており、さらにMultiByteToWideChar2関数はコードページがUTF-32だった時を除いてMultiByteToWideChar関数を使っています。
自分には同じ処理が行われているように見えました。

@AppVeyorBot
Copy link

Build sakura 1.0.3136 completed (commit a6cd22f812 by @kazasaku)

@AppVeyorBot
Copy link

Build sakura 1.0.3137 completed (commit 6def41abc4 by @kazasaku)

@berryzplus
Copy link
Contributor

latin1 (ISO-8859-1) と windows-1252 (CP1252) は本来別で、windows-1252 は latin1 のスーパーセットなのですが、サクラエディタではどちらも windows-1252 として扱ってるんですかね?

ISO-8859-1とWindows-1252では、0x80から0x9fの範囲が異なっていますが、それ以外は共通だったと思います。
しかし、この判定処理では定義順のせいでwindows-1252をCODE_LATIN1と判定しています。

欧米の文字コードには 7bit 版の文字位置を規定する iso 646 というのがありまして、
unicode の 7bit範囲[ 0x00, 0x7F ] は iso 646 互換となっています。
https://ja.wikipedia.org/wiki/ISO/IEC_646
https://ja.wikipedia.org/wiki/ISO/IEC_10646

サクラエディタが iso-8859-1 を windows-1252 にマップしている理由を想像できる資料として以下のものがあります。
https://ja.wikipedia.org/wiki/ISO/IEC_8859-1#ISO-8859-1とWindows-1252の取り違え

実際にはWindows-1252で符号化されているのに、誤ってキャラクタセットISO-8859-1のラベルを付けることは、きわめてよくある誤りである。Windows-1252では、0x80から0x9Fの間の符号は文字と約物に使われるが、ISO-8859-1では制御符号である。多くのWebブラウザや電子メールクライアントはこのようなラベル付けの誤りに対応するため、ISO-8859-1の制御符号をWindows-1252の文字と解釈するが、これは標準に準拠した振る舞いではなく、ISO-8859-1とラベル付けされた内容ではこういった文字を生成することを避けるよう注意が払われるべきである。

サクラエディタは「多くのWebブラウザや電子メールクライアント」に準ずる存在だと思うので、ISO-8859-1でも範囲[ 0x80, 0x9F ]windows-1252として読み込んでしまうこと自体は合ってるように思います。何の警告も出さないことについて思うところがないわけではないですが、このPRの範囲とはちょっと違う気がします。

@ghost
Copy link
Author

ghost commented Oct 4, 2020

何の警告も出さないことについて思うところがないわけではないですが、このPRの範囲とはちょっと違う気がします。

別途issueで検討したほうがよさそうですね。
ISO-8859-1のファイルでNEL文字が使われていて、サクラエディタのNEL/LS/PSサポートがONの時、というケースがありそうです。

@ghost
Copy link
Author

ghost commented Oct 6, 2020

変更内容に挙げている「Windows-1252の重複解消( 17df240 )」ですが、このPRには含めないほうがいいと思ったので取りやめようと思っています。

定義方法の変更( 40a5363 )もレビューでの提案だったので入れてみましたが、分けた方が良いでしょうか?

@k-takata
Copy link
Member

k-takata commented Oct 6, 2020

変更内容に挙げている「Windows-1252の重複解消( 17df240 )」ですが、このPRには含めないほうがいいと思ったので取りやめようと思っています。

latin1 は cp1252 として扱われているということが明確になりましたし、含めても問題ないと思います。
含めるのであれば、コミットメッセージをもう少し詳しくして #1422 (comment) の内容をまとめたものを書いておくとよいと思います。

定義方法の変更( 40a5363 )もレビューでの提案だったので入れてみましたが、分けた方が良いでしょうか?

コミットは分かれていますし、それで十分ではないでしょうか。

@ghost
Copy link
Author

ghost commented Oct 6, 2020

#1422 (comment)
了解しました。修正しておきます。

novice123 and others added 11 commits October 6, 2020 20:00
https://sourceforge.net/p/sakura-editor/patchunicode/1050/
skrw_fix_xml_detect_v0_5.patch

・いくつかのエンコーディング名の別名を追加
MS932やSJIS、ハイフン・アンダーバー考慮
・xml encoding名が不明な名前だった場合にUTF-8と認識されるバグを修正
例 <?xml version="1.0" encoding="MS932" ?>
・xml宣言がありencoding名がない場合は、UTF-8固定だった(規格どおり)ものを自動認識を優先してそれでも不明ならUTF-8にするように修正
Windows-1252に対してCODE_LATIN1と1252の二つが定義されており、
それぞれの変換処理には前者の場合CLatin1::Latin1ToUni関数、後者の場合CCodePage::CPToUni関数が使われている。
Latin1(ISO-8859-1)とWindows-1252で差異のある0x80~0x9fの変換には、
どちらにおいてもMultiByteToWideChar関数にコードページ1252を指定して実行するようになっているため、
Latin1とWindows-1252を区別せずに処理しているように見えることから、後者の指定を除去することとした。
@AppVeyorBot
Copy link

Build sakura 1.0.3144 completed (commit 7e54c8f69b by @kazasaku)

@@ -1226,6 +1273,10 @@ ECodeType CESI::CheckKanjiCode(const char* pBuf, size_t nBufLen) noexcept
if( nret != CODE_NONE && GetStatus() != ESI_NODETECTED ){
return nret;
}
if( GetMetaName() == CODE_AUTODETECT ){
// MetaがAUTODETECTの場合は、encodingがないxml文書。これまで通りUTF-8とみなす。
return CODE_UTF8;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

おそらく最後の確認事項です。

ここにこの分岐を入れると、encoding指定がない、または、encoding指定を認識できない場合にデフォルトエンコーディングを使う、という仕様は実現できなくなるっす。XML規格的にはこちらが正しいですがそれでいいです?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

#1422 (comment)
「一旦これで。」の確認がとれれば、動作確認して終わりな認識です。

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

このまま進めてもよいのであれば、これでお願いします。
タイプ別設定を使うようにするPRは後から出します。

一応、同時対処してタイプ別設定を使う動作にしたものも残しておきます
master...kazasaku:feature/fix_detect_xml_charset

@ghost
Copy link
Author

ghost commented Oct 7, 2020

@berryzplus さん
解説ありがとうございます。多分、オリジナルのパッチが考慮していない点を巡って解釈の不一致が起きていたようです。

自分はsf.netに残された不具合修正を目的としたパッチのうち、手元で再現とその修正が確認できたものを可能な限りそのまま取り込むことを目的に作業していました。
このpatchunicode#1050では、「タイプ別設定で設定した文字コードが反映されない」問題の修正が含まれていません。

その一方で、encoding指定がない・あるものの不明なエンコーディング名だった時にこれまで(おそらく仕様に基づいて)UTF-8とみなしていた動作を、自動認識の結果を優先するものの最終手段としてUTF-8とみなすように変更しており、すべて失敗だった時の動作だけは変えていないように見えます。

仮にタイプ別設定も使うようにするならば:

  • AutoDetectByXML関数では、encoding指定なし及び不明なエンコーディング名が指定されたときCODE_NONEを返す
  • GetEncodingInfo_meta関数とCheckKanjiCode関数は一切変更しない
    • 変更するとしてもif文を整理して判定回数を減らすのみ

@ghost

This comment has been minimized.

}
}
std::string sBuf = pBuf;
return MatchEncoding( pBuf + i, sBuf.find_first_of( quoteChar, i ) - i );
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

このまま進めるみたいなので、スマホから失礼します。
ケチ臭い指摘で大変恐縮ですが、string_viewのほうが例外安全でスケールもしやすいと思います。
string_viewはC++17からでVC2017も対応済みです。
sBufのコンストラクタ引数のpBufは見た感じNUL終端文字列ではないかもしれません。長さも指定するのがおすすめです。
std::string::find_first_ofはstd::find_first_ofと違って、見つからないときに、npos(-1)を返します。npos-iが少し健康的ではない気がします。
(実際の動作上は問題ないですけど、MatchEncodingの長さの引数がマイナス値になります)

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ありがとうございます。

確かにNULL終端がないように見えますね。呼び出し元から渡された長さ情報(nSize)を使って、std::string_viewで構築するようにしておきます。
また、MatchEncodingの第2引数が負数だと判定は成功しないはずなので、これを呼ぶ必要はたぶんないです。
encoding指定が引用符で括られていないときは判定を省略しているようなので、find_first_ofnposが返ってきたら指定が閉じられていないものと判断し、同様に取り扱うようにします。

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

NUL終端は、付けたらいいと思います。
文字列として扱うバイト配列をNUL終端せずに使うことが不自然です。

この辺で確保量を +1 してやればよいはず。

// データ確保
buff = std::make_unique<char[]>(size);

呼出元は他にもあるので、対応するなら網羅する必要ありです。

ここの関数はC++で普通に書いたほうが(≒正規表現で書いたほうが)分かりやすいと思います。
もちろん書換は別件で構わないです。

::find_first_ofの戻り値がnposだった場合、MatchEncodingの第2引数が負数となってしまうため、
MatchEncodingでの判定処理が成功しなくなってしまう。
もしnposの場合は判定を省略し、指定がなかったものとして扱うようにする。

std::stringを使用していた箇所をstd::string_viewを使用するように変更する。
@AppVeyorBot
Copy link

Build sakura 1.0.3147 completed (commit 18f1266276 by @kazasaku)

Copy link
Contributor

@berryzplus berryzplus left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

問題ないと思います。

ファイル名 455a7ff 0ea3203 解説
テストファイル_01.xml UTF-8 SJIS encoding が認識されるようになった
テストファイル_02.txt EUC EUC coding が認識されるようになった
テストファイル_03.html JIS JIS content="charset=xxx" が認識されるようになった
テストファイル_04.html JIS JIS charset="xxx" が認識されるようになった
テストファイル_05.xml UTF-8 SJIS 認識できないencodingが無視されて自動判別された
テストファイル_06.xml UTF-8 UTF-8 XML宣言のencoding省略によりUTF-8と判定された

@ghost
Copy link
Author

ghost commented Oct 9, 2020

レビューありがとうございました。
どなたかマージの代行をお願いします。

Copy link
Contributor

@beru beru left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

問題ないと思います。

PRの説明に書かれているテスト内容を行って、書かれている通りの動作になることを確認しました。

ちなみにこのPR適用前の 2.4.2.3140 で同じファイルを開いたところ(自分が無意識に変えたかもしれない設定の影響があるかもしれませんが)テストファイル_01.xmlテストファイル_05.xml が文字化けして表示されました。

@beru beru merged commit ea149b0 into sakura-editor:master Oct 11, 2020
@ghost
Copy link
Author

ghost commented Oct 11, 2020

beru様、ありがとうございます。
これまで、テストファイル01及び05はencoding指定を認識できないためにUTF-8と誤判定し文字化けを起こしていました。このPRで取り込まれたpatchunicode#1050はこれを修正するものです。

@ghost ghost deleted the feature/fix_detect_charset_from_xml_declare branch October 11, 2020 02:51
@berryzplus
Copy link
Contributor

スルーしてしまったテストの問題点を一応共有しときます。

ファイル名 455a7ff 0ea3203 問題点
テストファイル_02.txt EUC EUC もともと自動検出でEUCになってたので coding が効いたか分からない
テストファイル_03.html JIS JIS もともと自動検出でJISになってたので content="charset=xxx" が効いたか分からない
テストファイル_04.html JIS JIS もともと自動検出でJISになってたので charset="xxx" が効いたか分からない

それぞれ全角文字を削って 7bit ASCII で表現できる文字のみにした状態で、変更前が SJIS と判定されることと変更後に指定された文字コードで認識されることを確認しときました。

@ghost
Copy link
Author

ghost commented Oct 14, 2020

それぞれ全角文字を削って 7bit ASCII で表現できる文字のみにした状態で、変更前が SJIS と判定されることと変更後に指定された文字コードで認識されることを確認しときました。

続きの作業をしていてASCIIだけならCodingやHTMLも確認できることに(今更)気が付きました。
本当に申し訳ございませんでした

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
🐛bug🦋 ■バグ修正(Something isn't working)
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants