-
Notifications
You must be signed in to change notification settings - Fork 163
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
JIS<=>SJIS 変換の際、常に日本語ロケールを使用する #1578
Conversation
Fixes sakura-editor#1103 Use _mbcjistojms_l and _mbcjmstojis_l instead of _mbcjistojms and _mbcjmstojis, so that always use Japanese locale when using these functions.
SonarCloud Quality Gate failed. |
✅ Build sakura 1.0.3532 completed (commit e3904ce2ee by @k-takata) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
英語版Windowsでは未確認ですが、#1103 (comment) に書かれている方法でロケールを en-US
に変更して確認しました。
EUC-JPのファイルを開くと文字化けする問題が解消される事を確認しました。
JIS<=>SJIS 変換で CRT の 明示的にコードページ指定すればロケールの影響を受けないで変換出来るかもしれません。 難点としてはちょびっとだけ実装とテストが面倒な事でしょうか…。 |
知っているかもですが Microsoftのサイトから開発者向けのWindows10の仮想OSイメージ が配布されていて、 |
知らなかったです、前にも教えてもらったかもしれないんですが忘れてました。
落としてもすぐ有効期限になっちゃいそうなのでやめときます。 |
51932 だか 20932 を指定すれば EUC-JP と UTF-16 を、JIS, SJIS を経由せずに変換できて効率が良さそうですが、今と同じ変換をしてくれるのかが分からないですね。(JIS は 50220, 50221, 50222 らしい。) 処理を大幅に変更する必要がありますが。 なお、 |
確かに元実装と同じ変換がされるか分からないですね。使う手間より確かめる手間のが掛かりそうです。
教えてくれたソースコードのファイルパスを開いて内容を見てみました。 改変したソースコードを配布してよいのかは分からなかったので調べてみました。 ところでなんでMSの実装はわざわざロケールのチェックを入れるんですかね?関数名に jis とか jms が含まれているので目的は明確だと思いますが、日本語以外のロケールだと JIS<=>SJIS 変換をされたら困るユースケースがあるんでしょうか? |
はい、CRT のコードを丸ごとコピーしてきて使うのはダメだと思います。 |
実装上の話で言うと、 |
approveいただきましたので、マージしたいと思います。 |
英語版のページを見ると有効期限は5月になっていました。が、ダウンロードのリンク先は英語ページも日本語ページも同じだったので、日本語ページの情報が古いだけのようですね。 |
おぉ、本当ですね。自分には英語のページを調べるという発想が浮かびませんでした。 VirtualBox をインストールしてダウンロードしたイメージをインポートしました。 |
確認ありがとうございます。 |
PR の目的
英語版WindowsでEUC-JPのファイルが文字化けするのを修正する。
カテゴリ
PR の背景
#1103 参照。
PR のメリット
英語版Windowsでの文字化けが直る。
PR のデメリット (トレードオフとかあれば)
多少遅くなる可能性あり。
_create_locale() で作成したロケールが解放されない。
仕様・動作説明
サクラエディタでは _mbcjistojms() と _mbcjmstojis() を JIS<=>SJIS の変換に使用していますが、これらの関数は現在のロケールが日本語の時しか動作しません。
代わりに _mbcjistojms_l() と _mbcjmstojis_l() を使い、日本語ロケールを明示的に指定することで、現在のロケールによらず、常に JIS<=>SJIS の変換を行えるようにします。
別案としては、_mbcjistojms() と _mbcjmstojis() からロケールのチェックを省いた関数を自前で実装する方法が考えられます。この場合、ロケールのチェックがない分、高速に動作する可能性がありますが、 変換ロジックでバグが混入するリスクが高まるでしょう。
PR の影響範囲
テスト内容
関連 issue, PR
Fix #1103
参考資料