問題タブ [mbcs]

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.

0 投票する
3 に答える
4150 参照

c++ - C ++でMBCSストリームをUTF-8に、またはその逆に変換する

Visual C++ (VS2005) を使用しており、プロジェクトをマルチバイト文字セット (MBCS) でコンパイルしています。ただし、プログラムは XMLRPC 経由で (utf-8 の) webapp と通信する必要があります。したがって、内部で MBCS を使用し、文字列を xmlrpc モジュールに送信する前に文字列を utf-8 に変換し、webapi から受信した後に MBCS に戻すことができるのではないかと考えています。

VC++ で MBCS と UTF-8 を変換する最良の方法は何ですか?

皆さんありがとう。

0 投票する
5 に答える
5634 参照

encoding - 0x7Fで始まり、長さが4バイトのマルチバイト文字セットはどれですか。

漢字を正しく表示するためのレガシーコードを取得しようとしています。私が使用しようとしている1つの文字エンコードは、0x7Fで始まり、4バイトの長さ(0x7Fバイトを含む)です。これがどのような種類のエンコーディングであり、どこでその情報を見つけることができるかを誰かが知っていますか?ありがとう..

更新:すべての文字を0xE3で開始し、長さが3バイトの日本語エンコーディングも使用する必要がありました。Windowsで日本語ロケールを選択すると、コンピューターでは正しく表示されますが、アプリケーションでは正しく表示されません。ただし、日本語以外のロケールを選択すると、ファイル名が正しく表示されません。したがって、このエンコーディングはUnicodeではないと思います。誰もがそれが何であるか知っていますか?それはANSIですか?シフトJISですか?

中国語の場合は、UnicodeとUTF-8文字でテストしましたが、同じパターンが得られています。0x7Fの後に3バイトが続きます。UnicodeとUTF-8は同じですか?

0 投票する
4 に答える
2294 参照

c++ - MFC アプリの Unicode/MBCS へのピース単位の変換

多言語入力を可能にするために拡張している大規模な MFC アプリケーションがあります。現時点では、ユーザーが 1 つのダイアログの編集ボックスに Unicode データを入力できるようにする必要があります。

アプリケーション全体で UNICODE または MBCS を有効にせずにこれを行う方法はありますか? 現時点では、アプリケーションのごく一部のみを変換する必要があります。これを区分的に行うことは可能ですか?


明確化: ::GetWindowTextW() を使用して、ウィンドウから Unicode 情報を取得できます。ユーザーがウィンドウに Unicode テキストを入力できるようにする方法を見つけようとしています。現在、 windows-1252 コードページ以外でユーザーが入力した文字は、 '?' として表示されます。これを修正する方法はありますか?

0 投票する
1 に答える
526 参照

.net - APIでUnicode文字を表現する方法

これは、Unicodeの質問というよりもMBCSの質問です。各インスタンスがそのメンバーの1つとしてUnicode文字を保持する構造体のリストを返すAPIを作成する必要があります。これは.NETにあるので、UTF-16が欲しいと思うかもしれませんが、アジアの文字の場合は、2文字が必要です。Unicode文字を返すときのベストプラクティスは何ですか?

  1. 2つのUTF-16文字の配列を使用します-1番目の文字をテストして、サロゲートであるかどうかを確認します。カウントしますか?
  2. サロゲートの問題を無視し、呼び出し元に任せて、実際のグリフエンコーディングスパン構造体を把握しますか?
  3. 代わりに文字列を使用して、長さが1文字でも2文字でもかまいませんか?
  4. UTF-32を使用する

人々は通常UTF-8に対して何をしますか?個々の文字を処理することはなく、すべてが文字列に保持されていると思います(たとえば、文字列内の文字の検索は、実際にはサブ文字列を検索することによって行われます)。多分それは私の中のC++プログラマーですが、文字列はとても重いようです。

#3をやろうと思います。他の人は何をしましたか?

0 投票する
2 に答える
1666 参照

c++ - tchar セーフ関数 -- UTF-8 定数のカウント パラメータ

ライブラリを char から TCHAR に移植しています。MSDN によると、このフラグメントの count パラメータは、バイト数ではなく、マルチバイト文字の数です。それで、私はこれを正しく理解しましたか?VC9 の私のプロジェクト プロパティは「Unicode 文字セットを使用する」と言っています。それは正しいと思いますが、それがカウント パラメータにどのように影響するかはわかりません。

「Windows プラットフォームでのみサポートされています。_mbsncmp と _mbsnbcmp は、strncmp のマルチバイト バージョンです。_mbsncmp は最大で count 個のマルチバイト文字を比較し、_mbsnbcmp は最大で count バイトを比較します。どちらも現在のマルチバイト コード ページを使用します。

_tcsnccmp と _tcsncmp は、それぞれ _mbsncmp と _mbsnbcmp に対応するジェネリック関数です。_tccmp は _tcsnccmp と同等です。」

同様の質問は、_tcslen と _tcsclen です。

0 投票する
4 に答える
6257 参照

windows - 「ANSI」コード ページとして UTF-8 が許可されないのはなぜですか?

Windows_setmbcp関数では、有効なコード ページを使用できます...

(サポートされていない UTF-7 と UTF-8 を除く)

OK、UTF-7 をサポートしないのは理にかなっています。文字の表現は一意ではないため、複雑さとセキュリティ リスクが生じます。

しかし、なぜ UTF-8 ではないのでしょうか?

私が理解しているように、Windows API 関数の「ANSI」バージョンは引数を UTF-16 に変換し、同等の「W」関数を呼び出し、出力内のすべての文字列を「ANSI」に変換します。これは私が手動で行ってきたことです。では、なぜ Windows がそれを実行できないのでしょうか。

0 投票する
4 に答える
39728 参照

windows - WindowsでのMBCSとUTF-8の違い

Windowsの文字セットとエンコーディングについて読んでいます。Visual Studioコンパイラ(C ++用)には、MBCSとUNICODEという2つのコンパイラフラグがあることに気付きました。それらの違いは何ですか?私が得ていないのは、UTF-8がMBCSエンコーディングと概念的にどのように異なるかということです。また、MSDNで次の引用を見つけました:

Unicodeは16ビット文字エンコーディングです

これは私がUnicodeについて読んだものをすべて否定します。Unicodeは、UTF-8やUTF-16などのさまざまなエンコーディングでエンコードできると思いました。誰かがこの混乱にもう少し光を当てることができますか?

0 投票する
5 に答える
8385 参照

unicode - Unicode 文字の優先表示幅 (列) を知る方法は?

UTF-16leUTF-8など、さまざまな Unicode エンコーディングでは、1 文字が 2 バイトまたは 3 バイトを占める場合があります。多くの Unicode アプリケーションは、Unicode 文字がすべてラテン文字であるように、Unicode 文字の表示幅を考慮しません。たとえば、80列のテキストでは、1 行に40 個の漢字または80 個のラテン文字を含める必要がありますが、ほとんどのアプリケーション (Eclipse、Notepad++、およびすべてのよく知られているテキスト エディターなど、良い例外があれば敢えて) をカウントするだけです。各漢字をラテン文字として 1 幅として。これは確かに結果のフォーマットを醜く、整列させません。

たとえば、タブ幅が 8 の場合、次のように醜い結果が得られます (すべての Unicode を 1 表示幅としてカウントします)。

ただし、予想される形式は次のとおりです (各漢字を 2 幅としてカウントします)。

文字の表示幅の計算が不適切なため、これらのエディターは、タブの配置、行の折り返し、段落の再フォーマットを行うときにまったく役に立たなくなります。

ただし、文字の幅はフォントによって異なる場合がありますが、固定サイズの端末フォントのすべての場合、漢字は常に倍幅です。つまり、フォントに関係なく、各漢字は 2 幅で表示することが望ましいということです。

解決策の 1 つは、エンコーディングをGB2312に変換することで正しい幅を取得できることです。GB2312エンコーディングでは、各漢字が 2 バイトかかります。ただし、一部の Unicode 文字は GB2312 文字セット (またはGBK文字セット)には存在しません。また、一般に、エンコードされたサイズ (バイト単位) から表示幅を計算することはお勧めできません。

Unicode の ( \u0080.. \uFFFF) の範囲内のすべての文字を単純に 2 幅として計算することも正しくありません。これは、範囲内に 1 幅の文字が多数散在しているためです。

また、アラビア文字や韓国語の文字は、任意の数の Unicode コード ポイントで単語/文字を構成するため、表示幅を計算するのも困難です。

そのため、Unicode コード ポイントの表示幅は整数ではない可能性がありますが、それで問題ないと思います。実際には、整数に固定することができます。少なくとも、何もないよりはましです。

では、Unicode 標準の char の優先表示幅に関連する属性はありますか? または、表示幅を計算する Java ライブラリ関数はありますか?

0 投票する
2 に答える
113 参照

c++ - MBCSOSのシングルバイト文字アプリで実行するリスク

文字セットが「未設定」のMFCアプリケーションがあります。マルチバイト文字セットのコードページがあるOSでこのアプリケーションを実行することに関連するリスクは何ですか?

0 投票する
1 に答える
1690 参照

python - WindowsでのPythonでのファイル名のフォーマット

私は2つの異なるファイルを持っています:

'╠.txt'および'¦.txt'

そのような単純なコード:

戻るだろう

OxCCの代わりに╠文字のコード0xA6を取得している理由がわかりません。私はencode-decodeメソッドを使って遊んでみましたが、成功しませんでした。sys.getfilesystemencoding()がmbcsに設定されていることに気づきましたが、cp437のように変更することはできません。

どんな助けでも大歓迎です。ありがとう!