0

Web サービスを使用する Java アプリケーションを開発しています。Web サービスは、データを自動的に Unicode にエンコードする SAP サーバーを使用して作成されます。Web サービスから Unicode 文字列を取得します。

"倥䙄ㄭ㌮਍쿣ී㈊〠漠橢਍圯湩湁楳湅潣楤杮਍湥潤橢਍″‰‰䙄㰊഼┊敄瑶灹⁥佐呓†䘠湯⒁佃剕敠牯慭慌杮䔠ൎ入力祔数⼠潆瑮਍匯扵祴数⼠祔数റ入力慂敳潆瑮⼠潃牵敩൲入力慎敭⼠う㄰਍䔯不真面目湩'‰൒㸊ാ攊摮扯൪㐊〠漠橢਍㰼਍䰯湥瑧‵‰൒㸊ാ猊牴慥൭䘯〰‱⸱2 "

以上が回答です。

String のような読み取り可能なテキスト形式に変換したいと考えています。私はコアJavaを使用しています。

4

3 に答える 3

2

倥䙄ㄭ㌮਍쿣ී㈊アプリケーション慭慌杮䔠ൎ入力祔数⼠潆瑮਍匯扵祴数⼠祔数റ入力慂敳潆瑮⼠潃牵敩൲入力慎敭⼠う㄰਍䔯䔯苦心湩′‰൒㸊ാ攮攮扯൪㐊〠漠橢਍㰼਍䰯湥瑧‵‰൒㸊ാ猊牴慥൭䘯〰‱⸱2

これは、UTF-16LE として解釈された PDF ファイルです。

応答を受信して​​いるコンポーネントと、入力を処理して UTF-16LE としてデコードされないようにする方法を確認する必要がありますが、バイナリ ファイルであるため、最終的に「読み取り可能な」バージョンはありません。PDF ファイルからドキュメント テキストを抽出することは、はるかに大きな問題です。

(注: Unicode は文字セットであり、UTF-16LE はそのセットをバイトにエンコードしたものです。Microsoft は、歴史的な事故により、UTF-16LE エンコードを「Unicode」と呼んでいますが、誤解を招く可能性があります。)

于 2012-07-11T21:50:28.207 に答える
0

これは間違いなく有効な文字列ではありません。これは、壊れた UTF-16 のように見えます。

アップデート

確かに@Bobinceは正しいです。これはUTF-16で表示されたPDFファイル(おそらくUTF-8 /またはプレーンASCII)です。UTF-8 で表示すると、この文字列は実際に PDF ソース コードを示します。良いキャッチ。

于 2012-07-13T09:25:07.827 に答える
0

byte[]またはInputStream(両方のバイナリ データ) を持っている場合、次の方法で aStringまたはReader(両方のテキスト) を取得できます。

final String encoding = "UTF-8"; // "UTF16LE" or "UTF-16BE"

byte[] b = ...;
String s = new String(b, encoding);

InputStream is = ...;
BufferedReader reader = new BufferedReader(new InputStreamReader(is, encoding));
for (;;) {
    String line = reader.readLine();
}

逆のプロセスでは、次を使用します。

byte[] b = s.geBytes(encoding);
OutputStream os = ...;

BufferedWriter writer = new BufferedWriter(new OuputStreamWriter(os, encoding));
writer.println(s);

Unicode は、すべての文字の番号付けシステムです。UTF バリアントは、Unicode をバイトとして実装します。


あなたの問題:

通常の方法 (Web サービス) では、既にString. たとえば、上記の Writer を使用して、その文字列をファイルに書き込むことができます。完全な Unicode フォントで自分で確認するか、ファイルを渡して確認してください。

(?) テキストがどの UTF バリアントにあるかを確認する必要があります。アジア言語のスクリプトの場合、UTF-16 (リトル エンディアンまたはビッグ エンディアン) が最適です。XML では、すでに定義されています。


添加:

FileWriterは、(マシンのオペレーティング システムから) デフォルトのエンコーディングを使用してファイルに書き込みます。代わりに次を使用します。

new OutputStreamWriter(new FileOutputStream(new File("...")), "UTF-8")

@bobinceが言ったように、バイナリPDFの場合は、byte []またはInputStreamでFileOutputStreamのみを使用してください。

于 2012-07-10T14:11:21.133 に答える