問題タブ [iso-8859-1]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
servlets - ISO-8859-1 と UTF-8 の両方でデータを受信するサーブレット。URL デコードの方法
私は3つの異なるソースからデータを受け取るWebアプリケーション(実際には単なるサーブレットです)を持っています:
- ソース A は UTF-8 で記述された HTML ドキュメントであり、 経由でデータを送信します
<form method="get">
。 - ソース B は ISO-8859-1 で記述されており、 経由でもデータを送信します
<form method="get">
。 - ソース C は ISO-8859-1 で記述され、 経由でデータを送信します
<a href="http://my-servlet-url?param=value¶m2=value2&etc">
。
サーブレットはリクエスト パラメータを受け取り、UTF-8 を使用してそれらを URL デコードします。ご想像のとおり、A は問題なく動作しますが、B と C は失敗します (ISO-8859-1 でエンコードされているものを UTF-8 で URL デコードすることはできません...)。
B と C を少し変更することはできますが、ISO-8859-1 から UTF-8 に変更することは許可されていません。これにより、すべての問題が解決されます。
B では、 に追加することで問題を解決できましaccept-charset="UTF-8"
た<form>
。そのため、ページが ISO であっても、データは UTF-8 で送信されます。
Cを修正するにはどうすればよいですか?
または、サーブレットの文字セットを特定する方法はありますか?それぞれの場合に適切なエンコーディングで URL デコードを呼び出すことができますか?
編集:私はちょうどこれを見つけました。これは私の問題を解決するようです。パフォーマンスに影響を与えるかどうかを判断するために、まだいくつかのテストを行う必要がありますが、その解決策に固執すると思います.
browser - ISO-8859-1 サイトで Unicode を使用すると、ブラウザはどのように解釈しますか?
そのため、ISO-8859-1 エンコーディングを使用するサイトを取得しましたが、それを変更することはできません。サイトの Web アプリに入力したコンテンツが正しく解析されるようにしたいと考えています。パーサーは、文字単位で機能します。また、パーサーを変更することもできません。パーサーが処理するファイルを作成しているだけです。解析後に表示するようにアプリに指示しているファイルのコンテンツには、Unicode 文字が含まれています (または、CP437 にマップされた Windows Alt コードによって生成されたものであっても、少なくともそう仮定します)。パーサーの文字ごとの操作のため、エンティティを使用することはできません。パーサーが出力時にエスケープする唯一の文字は、アンパサンド、小なり記号、大なり記号などのマークアップに依存する文字です。先に進んでこれを実行して、どのように見えるかを確認しますが、出力は出版物でしか見ることができません。
要するに、サイトに、ISO-8859-1 を使用することになっていることを示すメタ タグが付いたサイトで ▼ÇÑ¥☺☻ を出力するように指示した場合、ブラウザは Unicode を自動検出して表示しますか?文字通り ISO-8859-1 として変換し、別の文字セットを取得しますか?
更新: http://doorstop.csh.rit.edu/home/testingに一時的なテスト サイトを作成しました。このサイトでは、BOM なしで UTF-8 を使用して Notepad++ でテスト ファイルを作成しましたが、エンコーディングを ISO に設定するメタ タグを使用しました。 -8859-1.
php - šおよびその他の文字は表示されません
私はいくつかのCZECHcharに夢中です。DBでは、č(および同様の文字)を使用して文字列を保存しました。これは、ページの文字セットをISO-8859-1に設定した場合にのみ表示できます。
大丈夫かもしれませんが、UTF-8 XMLファイルがあり、このxmlから文字列を取得しようとすると、問題が発生します。基本的に、ISO-8859-1文字セットを使用すると、XMLの文字列が正しく表示されません。xmlはUTF-8です。čと類似のcharを&#353;に変換しようとしました。xmlでISO-8859-1文字セットを使用していますが、正しく表示されません。
それで。状況は次のとおりです。
UTF-8のXMLとUTF-8のHTMLページ、XMLの文字列は正しいがDBの文字列は表示されないISO-8859-1のXMLとUTF-8のHTMLページ、XMLの文字列は正しくないがDBの文字列は正しい
また、ICONVまたは同様の機能を使用してXML文字列を変換しようとしましたが、何も起こりません。
私を手伝ってくれますか?
アンドレア
php - ___ UTF-8 へのエンコード - 最終的な解決策はありますか?
私はウェブ全体を見てきました。私はSO、PHPドキュメントなどを見てきました。
標準的な解決策がないというのはばかげた問題のように思えます。不明な文字セットを取得し、奇妙な文字 (英語の引用符など) が含まれている場合、それらを UTF-8 に変換する標準的な方法はありますか?
大量の関数とチェックを使用する多くの厄介なソリューションを見てきましたが、どれも確実に機能しません。
独自の機能や常に機能するソリューションを思いついた人はいますか?
編集
多くの人が「解けない」とかそういうことを答えています。utf8_encode
私は今それを理解していますが、非常に限られている以外に機能する解決策を提供した人はいません。これに対処するためにどのような方法がありますか? 最良の方法は何ですか?
mysql - MySQL レプリケーションの文字セット
レプリケーションで utf-8 の代わりに latin1 が使用されるようにするにはどうすればよいですか?
Linux システム上の MySQL 5.1.22 サーバー (マスター) と FreeBSD システム上の MySQL 5.1.42 サーバー (スレーブ) の間で移行しています。私のレプリケーションはうまくいきますが、ASCII 以外の文字が varchars にあると、それらは「変」になります。Linux/MySQL-5.1.22 は、次の文字セット変数を示しています。
FreeBSDが表示されている間
MySQL CLI からこれらの変数を設定しても効果はなく、my.cnf またはコマンド ラインでこれらの変数を設定すると、サーバーが起動しなくなります。
もちろん、どちらのサーバーにも問題のテーブルが同じ方法で作成されています。この場合は、DEFAULT CHARSET=latin1 を使用しています。例を挙げましょう:
マスターで、Latin1 端末で「INSERT INTO test VALUES ('æøå')」を実行すると、Latin1 ベースの端末から選択すると、これがスレーブになります。
レプリケーション スレーブの UTF-8 ベースの端末では、test に以下が含まれます。
したがって、テーブル定義がlatin1であっても、utf8に変換されるというのが私の結論です。これは正しい結論ですか?
もちろん、マスターの latin1 端末では、次のように表示されます。
両方のシステム文字セットが utf-8 であるため、両方の端末を utf-8 に設定し、utf-8 端末を使用するマスターで「INSERT INTO test VALUES ('æøå')」を再度実行すると、utf-8 を使用するスレーブで私は得る:
私の結論が正しければ、レプリケートされたすべてのデータは utf8 に変換され (utf8 の場合は、latin1 として扱われ、utf8 に変換されます)、CREATE TABLE が示唆するように、テーブル内のすべての古いデータは latin1 になります。レガシーアプリケーションがlatin1に依存しているという事実がなければ、すべてをutf-8に変換したいので、それらがまだ存在している間はlatin1のままにしておく必要があります。
レプリケーションが latin1 を読み取り、latin1 として扱い、スレーブに latin1 として書き込むようにするにはどうすればよいですか?
乾杯
ニック
java - Java InputStream エンコーディング/文字セット
次の (例) コードの実行
この出力が得られます
ライン 9 の出力で正しいバイト値 (-27) を保持するにはどうすればよいですか? System.out.println(s)
その結果、コマンド (å)の期待される出力を受け取ります。
jquery - jQueryはISO文字セットをajaxリクエストに設定します
サーバーにajaxリクエストを送信するためにjQueryを使用していますが、文字セットに問題があります。ajax関数のドキュメントには、データは常にW3C XMLHTTPRequest標準に従ってUTF-8で送信されると書かれているため、jQueryでリクエストの文字セットを変更できるとは思いません(スクリプトをロードする場合を除きますが、それは私のものではありません)場合)。
では、jQueryでajaxリクエストのISO-8859-1文字セットを設定する方法を知っていますか?
html - 送信された文字エンコーディング -- _charset_ 隠しフィールド
この Web アプリには、テキスト領域を含む複数の HTML ページがあります。すべてのページは ISO-8859-1 文字セットで表示されます。Windows マシンの IE6 を介してページにアクセスし、「スマート クォート」などの特殊文字がテキスト領域にコピーされると、一部のページは Windows 1252 文字エンコーディングを使用してページを送信します。他のページでは、ページは UTF-8 文字エンコーディングを使用して送信されているように見えます。次の非表示フィールドを使用して、送信文字エンコーディングを追跡しています。
Windows 1252 サブミット文字エンコーディング ページで、「windows-1252」の値を受け取ります。
UTF-8 送信文字エンコーディング ページでは、空白の値が返されます。
バックエンドでは、ISO-8859-1 を使用しています。送信文字エンコーディングが理想的ですが、IE 6 でその動作を強制するオプションはありません。ページが ISO-8859-1 で再レンダリングされるときに正しくレンダリングされるようにします。
ページを詳細に調べたところ、一部のページが 1 つの文字エンコーディングで送信される理由として、何も思い浮かびませんでした。
1) IE 6 が空白の文字セットを返す場合、それは実際に UTF-8 と同等ですか? 送信する文字エンコーディングが UTF-8 の場合、IE 6 は常に空白の文字セットを返しますか、それとも、使用する文字エンコーディングを適切に判断できない場合のみですか?
2) IE 6 が一部のページで Windows 1252 を選択し、他のページで UTF-8 を選択するページにどのような違いがある可能性がありますか? ページをスキャンして UTF-8 文字と accept-charset 属性を探しましたが、どちらも見つかりませんでした。
追記:次のリンクでcharset hidden 入力に関する情報を見つけました。
http://web.archive.org/web/20060427015200/ppewww.ph.gla.ac.uk/~flavell/charset/form-i18n.html
java - jQueryAJAX呼び出しが文字エンコードを台無しにする
JSONを出力するサーブレットがあります。サーブレットの出力エンコーディングはISO-8859-1です。WebアプリのページもISO-8859-1に設定されています。私はUTF-8を使用しますが、これは私の制御の範囲外です。ISO-8859-1を使用する必要があります。
サーブレットを単独でヒットすると、出力されたJSONデータを見ることができます。文字エンコードは正しく、どの文字も奇妙に見えません。
ただし、AJAXを介してサーブレットを呼び出し、取得したデータを使用して選択ボックスにデータを入力すると、アクセントのあるすべての文字の代わりに(たとえば、重度またはアキュートアクセント、分音記号、曲折アクセント記号付きの)文字が表示されます。 )。Firebugの下の[ネット]タブで応答を見ると、テキストが正常に表示されていることがわかります。ただし、そのデータを使用して選択ボックスにデータを入力すると、疑問のあるひし形が表示されます。
これらの文字はすべて有効なISO-8859-1文字であるため、正しく表示されない理由がわかりません。
編集
いくつかの詳細情報。で使用GET
しjQuery.ajax
、に設定scriptCharset
しましたISO-8859-1
。サーバー側では、を使用してエンコーディングをISO-8859-1に明示的に設定しましたrequest.setCharacterEncoding("ISO-8859-1");
編集
コードサンプル:
これは私が現在持っているものです。効果を追加scriptCharset: "ISO-8859-1"
しませんでした。
私のサーブレットはorg.json.JSONObject
、文字列を使用して出力します。response.getWriter().print(jsonObject.toString());
アップデート
dataType
JSONとUTF-8についてのコメントによると、データをテキストとして取得して( text
inに設定)、自分でJSONとして評価できるかどうかjQuery.ajax
(Javascriptで)を確認しようとしました。それもうまくいかないようです!私がそうするときconsole.log
、私はまだファンキーなダイヤモンドを手に入れます。ただし、Firebugの[ネット]タブで確認すると、すべてが正常に表示されます。
ネットタブ:
しかし、私がconsole.log(text)
得たものを使うとjQuery.ajax
、次のようになります。
jQueryがデータに対して何か奇妙なことをしているように私には思えます。
unicode - ファイルの ISO-8859-1ness を「強制」する方法は?
私が日本で Web サイトを開発していたときのことを覚えています。日本では、通貨には 3 つの異なる文字エンコーディングがあります。開発者は、ソース ファイルのエンコーディングを「強制」して、IDE で常に正しいエンコーディングで開くようにするトリックを持っていました。
彼らがしたことは、その特定の文字エンコーディングにのみ存在する日本語の文字を含むファイルの先頭にコメントを入れることでした- それは他のどの文字エンコーディングにもありませんでした! これは完璧に機能しました。
これを覚えているのは、英語圏ではありますが、似たような問題を抱えているからです。
ISO-8859-1 でなければならないファイルがいくつかありますが、エディター (Linux では Bluefish 1.0.7) で UTF-8 として開き続けます。これは通常、ポンド (£) 記号などを除いて問題になりません。ファイルを修正して ISO-8859-1 として再度保存することはできますが、エディターでは常にISO-8859-1 として開く必要があります。
それで、私が上で述べたように、これを行うためのキャラクターハックはありますか?または他の方法はありますか?
PS。Unicode の支持者/伝道者は、私を改宗させようとして時間を無駄にする必要はありません。私はすでに彼らの 1 人だからです! これは私が受け継いだガタガタの古いシステムです:-(
PPS。私は古いオナラであり、私のやり方で設定されているため、「別のエディターを使用してください」と言わないでください:-)