問題タブ [codepages]
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.
python - Python での文字列エンコーディング
Python では、文字列はユニコード ( utf-16 と utf-8 の両方) と、異なるエンコーディングのシングルバイト ( cp1251、cp1252 など) の場合があります。エンコーディング文字列が何であるかを確認することは可能ですか? 例えば、
月のテキスト名を含む文字列を返します。MacOS では返される文字列は utf-16 になり、英語ローカルの Windows では ascii エンコーディングで 1 バイトになり、英語以外のロケールの Windows では、cp1251 などのロケールのコードページでエンコードされます。そのような文字列をどのように処理できますか?
java - MVS システムから Java 環境に送られるデータを解釈するには、どのコードページ/文字セットを使用する必要がありますか?
興味深い問題が発生しました (レガシー システムとのやり取りではよくあることです)。私は、さまざまなシステムから要求を受け取ることができるアプリケーション (現在 x86 Linux または Windows システムで実行されている) に取り組んでおり、そのうちの 1 つが MVS システムです。
MVS システムからの要求データを解釈するためにどのコードページ/文字セットを使用する必要があるかを判断しようとしています。
以前、私は 'cp500' (IBM-500) を使用して z/OS システムに来るバイト日付を解釈しましたが、MVS は少し古いシステムであり、IBM が考えを変えたように見えたので心配です。使用するエンコーディングに関して一貫して (何十もの EBCDIC エンコーディングが存在する必要があります)、その cp500 は正しいエンコーディングではない可能性があります。
Java の文字セットについて私が見つけた最良のリソースはhttp://mindprod.com/jgloss/encodingです。しかし、このサイトと IBM Infocenters からは、明確な回答を得ることができませんでした。
編集:以下のPaxへの私の応答から追加:
私の質問には、リクエスト データの出所に明らかな穴がありました。この場合、データの発信元は Websphere MQ インターフェース経由です。Websphere MQ には適切なエンコーディングに変換するための機能がありますが、これは MQMessage.readString() を使用してデータを読み取るためのものであり、その後非推奨になりました。私はこれを使用したいと思いますが、キューから直接バイトを読み取る MQQueue からメッセージを読み取る方法を変更できない独自のインターフェイス フレームワークを使用しているため、ハンドル変換が残っています。
最終回答: これについてフォローアップしたいと思いました。正しい文字セットは確かに cp500 (IBM-500) であることがわかりました。ただし、結果は異なる可能性があるという印象を受けています。同じ問題を抱えている他の人のためのヒント:
Charset.availableCharsets(); を利用します。これにより、ランタイムでサポートされている文字セットのマップが表示されます。これらのセットを反復処理し、その文字セットに変換されたバイト データを出力しました。私が望んでいた答えは得られませんでしたが (主に、入ってくるデータを読み取ることができなかったため)、他の人にとっては役立つと思います。
サポートされている文字セットのリストについては、 http : //mindprod.com/jgloss/encodingを参照してください。
最後に、私はこれを確認していませんが、正しい JRE を使用していることを確認してください。IBM ランタイムは、OpenJDK や Sun のランタイムよりも多くの EBCDIC 文字セットをサポートしていると思います。
javascript - ヨーロッパの文字を含むHTMLおよびJavaScript用のVisualStudio2008のUTF-8とコードページ1252
私は、 JavaScriptを入力として受け取り、そのJavaScriptの圧縮バージョンを出力として作成するパーサーを開発してきました。
最初に、入力JavaScriptを読み込もうとしたときにパーサーが失敗したことがわかりました。これは、 VisualStudio2008がデフォルトでファイルをUTF-8として保存するという事実と関係があると思います。そして、そうするとき、VSはUTF-8ファイルの先頭にいくつかの隠し文字を含めます。
回避策として、VisualStudioを使用してファイルをコードページ1252として保存しました。そうすると、パーサーは入力JavaScriptを読み取ることができました。
アクセントを含む特別なヨーロッパ文字を使用する必要があることに注意してください。
だから、ここに私の質問があります:
- コードページ1252またはUTF-8を使用する必要がありますか?
- Visual StudioがデフォルトでファイルをUTF-8として保存するのはなぜですか?
- ファイルを1252として保存することを選択した場合、問題が発生しますか?
- Eclipseはデフォルトでファイルをコードページ1252として保存しているように見えます。それは正しいですか?
.net - .Net Unicode の問題、vb6 レガシー
私はVB6で復号化ルーチンを持っています。C#で同じ復号化が必要になりました。復号化が必要な文字列は Unicode であるため、Encoding.Unicode.GetString を使用して C# で入力を読み取ります。入力は、VB6 とまったく同じに見えるようになりました。
ループの最初の数文字は復号化されています。次に、違いに遭遇します... プログラムは、VB6 とは異なるインデックスで文字 '~' を解析します。
デバッグすると、VB と .Net で次のように表示されます。
VB6 ~ = コード 152
C# ~ = コード 732
言うまでもなく、復号化は失敗します。上記のキャラクターには 152 を取得する必要があります。
ここで何が問題なのですか?
よろしく、
ミシェル
windows - MMEおよびDirectMusicを使用する場合のANSIまたはOEMコードページ?
MMEからMIDIポート名を読み取るとき、名前はANSIコードページを使用してエンコードされたマルチバイト文字列であることに気付きました。これは私のアプリがデフォルトで使用します。DirectMusicドライバーからこれらの名前を受け取る場合、名前はOEMコードページでエンコードされたワイド文字列です。コードページの簡単な復習については、RaymondChenによるこの記事を参照してください。
私のドイツ語システムでは、これは、ANSIコードページであることが判明した現在のコードページを使用すると、MMEから「Audiogerät」を取得し、DirectMusicから「Audiogeröt」を取得することを意味します。後者は間違っています。これは、その姓を代わりにOEMエンコードとして扱うと修正されます。
では、これらの名前をデコードするコードページをどのように知ることができますか?DirectMusicに由来する名前が異なる方法でエンコードされるのはなぜですか?それはUSBドライバーから来ていますか?COMフレームワーク?DirectMusic?MIDIポートの名前を読み取るときに使用するコードページを確実に知るにはどうすればよいですか?
情報:
- 使用するコードページの引数として、およびを使用して変換を実行するためにand関数を使用します
MultiByteToWideChar()
。WideCharToMultiByte()
CP_ACP
CP_OEMCP
midiInGetDeviceCaps()
MMEサブシステムからMIDIポート情報を取得するために使用します...- ...そして(ANSI)コードページ
MIDIINCAPS.szPname
を使用して変換します。CP_ACP
IID_IDirectMusic8::EnumPort()
DirectMusicからポート情報を取得するために使用します...DMUS_PORTCAPS.wszDescription
...そしてコードページを使用して変換しCP_OEMCP
ます。
c# - HtmlElementEventArgs KeyPressedCode 混乱
次のコードを使用して、「。」かどうかを判断しています。(ピリオド) が webbrowser コントロールに入力されました:
msdn KeyPressedCode によると、ASCII 値が返されます。「.」を入力すると、ブレークポイントによって得られるのは「190」です。でも。これは、標準の ASCII テーブルにも記載されていません。もちろん、単純に 190 をテストすることもできますが、KeyPressedCode は、コード ページや言語などが異なるシステムごとに異なる値を返すのではないかと心配しています。
KeyPressedCode が「46」ではなく「190」を返す理由と、この問題を「安全に」管理する方法を教えてください。
興味深いことに、' ' (スペース) の戻り値は常に正しい ('32') です。System.Text.Encoding.GetEncoding とさまざまなコード ページで遊んでも問題は解決しませんでしたが、コード ページの経験はあまりありません。
windows - 現在のキーボード レイアウトのコード ページを取得する方法は?
非 Unicode アプリケーションは、Unicode キーボード入力 (WM_CHAR/etc.) を処理できる必要があるため、8 ビット文字コードを受け取り、それを内部で Unicode に変換します。9x 互換性が必要なため、ほとんどの Unicode API を使用することはできません。
現在、PRIMARYLANGID(GetKeyboardLayout(0)) によって返された言語を調べ、ハードコードされたテーブルで関連するコード ページを調べます。特定の言語またはキーボード レイアウトで使用されるコード ページを取得する関数が見つかりませんでした。文字/文字列の変換は、MultiByteToWideChar で行うことができます。
現在のキーボード レイアウトのコード ページを取得する方法はありますか? GetACP は、現在のキーボード レイアウトの影響を受けない既定のシステム コード ページを返します。
sharepoint - Sharepoint URL の変更 特殊文字
北欧文字「Ø」を 16 進数 (%D8) として含む、Sharepoint の「ドキュメントへのリンク」に URL を保存しています。Sharepoint は % 記号をエンコードしています (したがって、%25D8 になります)。
URL をアドレス バーに直接入力すると、問題なく動作します。URL エンコードしないと、同じ問題が発生します。誰かアイデアはありますか?
java - 基になる Windows コード ページと一致する Java file.encoding 値をどのように指定しますか?
を使用してソケット経由でデータを受信する Java アプリケーションがありますInputStreamReader
。getEncoding
メソッドから「Cp1252」が報告されます。
これは、システムがコード ページとして報告するものと必ずしも一致しません。例えば:
アプリケーションは、バイト 0x81 を受け取る場合があります。これは、コード ページ 850 で文字 を表しますü
。プログラムはそのバイトをコード ページ 1252 で解釈しますが、この値では文字が定義されていないため、代わりに疑問符が表示されます。
アプリケーションを起動するバッチ ファイルに別のコマンド ライン オプションを追加することで、コード ページ 850 を使用しているある顧客のために、この問題を回避することができました。
もちろん、すべての顧客がコード ページ 850 を使用しているわけではありません。基盤となる Windows システムと互換性のあるコード ページを Java で使用するにはどうすればよいですか? 私の好みは、Javaコードをそのままにして、バッチファイルに入れることができるものです。
unicode - ダミーの Unicode ガイド
誰か簡潔な定義を教えてくれませんか
- ユニコード
- UTF7
- UTF8
- UTF16
- UTF32
- コードページ
- Ascii/Ansi/Windows 1252 との違い
私はウィキペディアのリンクや信じられないほどの詳細を求めているのではなく、Unicode の巨大なバリエーションがどのように、なぜ生じたのか、そしてプログラマーとして関心を持つべき理由についての簡単な情報を求めているだけです。