0

ソースからバイト データを取り出して暗号化し、ファイル システムに保存しようとしています。

暗号化には、jasyptBasicTextEncryptorクラスを使用しています。ファイル システムへの保存には、Apache の Commons IOUtilsクラスを使用しています。

必要に応じて、これらのファイルは復号化され、ユーザーのブラウザに送信されます。このシステムは、デフォルトの文字セットがMacRomanであるローカル マシンで動作しますが、デフォルトの文字セットがUTF-8であるサーバーでは失敗します。

プロセスの各段階でエンコードを明示的に設定してMacRomanを使用すると、サーバーでも機能しますが、コードの残りの部分でUTF8を使用するため、これを行うことに懐疑的です。

MacRoman に変換せずにコードを動作させる方法はありますか?

4

2 に答える 2

1

どこでもUTF8を使用する必要があります。

操作の各最後で同じエンコーディングを使用している限り (そしてエンコーディングが必要なすべての文字を処理できる限り)、問題ありません。

于 2012-07-06T18:24:58.087 に答える
1

別の回答に対するコメントで、エンコーディングを使用していないと主張していますが、それは不可能です。このドキュメントによると、文字列と文字配列でのみ機能する BasicTextEncryptor クラスを使用しています。つまり、ある時点で、エンコーディングに依存しないバイト配列からエンコーディング固有の String または char 配列に変換していることを意味します。つまり、気づいているかどうかにかかわらず、どこかでエンコーディングに依存していることになります。その変換が行われている場所を追跡し、正しいエンコーディングであることを確認する必要があります。

あなたの質問には、「プロセスの各段階でエンコーディングを明示的に設定するとき」と記載されているため、データベースでどのようにエンコードされているかを知る必要があります。それが意味をなさない場合は、読み進めてください。

また、データベースから取得するファイルを暗号化しようとしているだけで、文字列表現を気にしていない可能性もあります。テキストとしてではなく、プレーンバイトとして扱いたい。その場合、BasicTextEncrypter (「テキストの通常強度の暗号化を簡単に実行するためのユーティリティ クラス」) は、このタスクには適していません。文字列を暗号化します。BasicBinaryEncryptor (「バイナリ(バイト配列) の通常強度の暗号化を簡単に実行するためのユーティリティ クラス」) が必要です。

于 2016-05-06T20:39:54.930 に答える