問題タブ [multibyte]

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 投票する
5 に答える
1768 参照

c++ - Windows APIでCharNextを正しく使用するにはどうすればよいですか?

日本語とラテン文字が混在するマルチバイト文字列があります。この文字列の一部を別のメモリ位置にコピーしようとしています。マルチバイト文字列であるため、一部の文字は1バイトを使用し、他の文字は2バイトを使用します。文字列の一部をコピーするときは、「半分」の日本語の文字をコピーしてはいけません。これを適切に実行できるようにするには、マルチバイト文字列の文字の開始位置と終了位置を判別できる必要があります。

たとえば、文字列に[2バイト][2バイト][1バイト]を必要とする3文字が含まれている場合、3ではなく2、4、または5バイトを他の場所にコピーする必要があります。 2番目の文字の半分だけをコピーします。

マルチバイト文字列の文字の開始位置と終了位置を把握するために、Windows API関数のCharNextとCharNextExAを使用しようとしていますが、運がありません。これらの関数を使用すると、一度に1文字ではなく、一度に1バイトずつ文字列をナビゲートします。MSDNによると、CharNextは文字列内の次の文字へのポインタを取得することになっています。

この問題を説明するためのコードを次に示します。

(メモリリークとエラーチェックの失敗は無視してください。)

さて、上記の例では、characterCountが6になると予想します。これは、アジアの文字列の文字数だからです。ただし、mbStringには18文字が含まれているため、代わりにcharacterCountは18になります。

それがどのように機能するのかわかりません。CharNextは、文字列内の「é–€é」が日本語文字のエンコードされたバージョンであるか、実際には文字é–€およびéであるかをどのように認識しますか?

いくつかのメモ:

  • すべての開発者がUnicodeについて知っておくべきことについてのJoelsブログ投稿を読みました。私はその中に何かを誤解したかもしれません。
  • 文字数を数えるだけなら、アジアの文字列の文字数を直接数えることができます。私の本当の目標は、マルチバイト文字列の一部を別の場所にコピーすることであることに注意してください。別の場所はマルチバイトのみをサポートし、ワイド文字はサポートしません。
  • MultiByteToWideCharを使用してmbStringの内容をワイド文字に戻すと、正しい文字列(門襲陀阿訓附)が得られます。これは、mbStringに問題がないことを示しています。

編集:明らかに、CharNext関数はUTF-8をサポートしていませんが、Microsoftはそれを文書化するのを忘れていました。私は自分のルーチンを一緒に投げたりコピーしたりしましたが、それは使用せず、改善する必要があります。簡単にクラッシュできると思います。

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

php - マルチバイト文字の正確な数を取得するには?

私は試した:

どちらも 9 を出力しますが、実際には 3 文字しかありません。

文字数の正しい数え方は?

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

php - PHPでマルチバイト句読点をシングルバイト句読点に変換するには?

たとえば、, と , はどちらもカンマですが、最初のものは 2 バイト、2 番目のものは 1 バイトです。

2 バイトを 1 バイトに変換するにはどうすればよいですか?

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

php - マルチバイトの句読点で分割すると余分な空の行があるのはなぜですか?

これを試して:

出力:

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

php - マルチバイト文字列の「abc123def」を「abc123def」に置き換えます

通常、私はこれを行います。

utf-8になることがわかっている場合は、パターンに小文字の「u」修飾子を追加するとよいと思います。しかし、utf-8がネイティブ文字セットを使用した場合の2倍、場合によっては3倍のストレージスペースを使用するという報告があるため、アプリケーションをutf-8に制限しないようにしています。

したがって、私は私のお気に入りのpreg_関数から離れようとしています。

これまでのところ、ほとんどのことはかなり単純ですが、通常は「\d」などのpreg_の文字クラスを使用する置換に少し固執しています。

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

unicode - UTF-8 の「可変幅エンコーディング」はどのように機能しますか?

Unicode 標準には十分なコードポイントがあり、それらをすべて格納するには 4 バイトが必要です。それが UTF-32 エンコーディングの機能です。しかし、UTF-8 エンコーディングでは、「可変幅エンコーディング」と呼ばれるものを使用して、これらをより小さなスペースに圧縮しています。

実際、US-ASCII の最初の 127 文字を実際の ASCII とまったく同じように 1 バイトで表すことができるため、何もせずに多くの ASCII テキストを UTF-8 であるかのように解釈できます。巧妙なトリック。それで、それはどのように機能しますか?

私はここで自分の質問をして答えます. さらに、私が間違っている場合は、誰かが私を修正できるかもしれません。

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

php - 文字列内の中国語(マルチバイト)文字を検出する

この文字列から漢字を検出し、最初の文字で始まり「-」で終わる部分を印刷するにはどうすればよいですか?(「中文文字。もう少し文字-」になります)。

ありがとうございました!

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

php - PHP mbstring.func_overload と mbstring 関数の使用

UTF-8 に従って他の言語をサポートするように、サイトの文字列処理を適合させたいと考えています。これを行う最善の方法は、標準の文字列関数をすべて放棄することです。

したがって、2 つのオプションがありmbstring.func_overloadます。php.ini でオプションを設定するか、コードに戻ってすべての関数をmb_*. サーバーの構成を変更する必要がないため、私のコードを使用する人にとっては、2 番目のオプションの方が簡単だと思います。(できれば!)

PHP 6 が登場したらどうなるでしょうか。適切なマルチバイト処理をサポートするため、それが私の選択にむき出しになる必要があります。

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

postgresql - PostgreSQL でアクセント付き文字を変換していますか?

PostgreSQL でアクセント付き文字を飾り気のない文字に置き換える既存の関数はありますか? のようなキャラクターは、それぞれになる必要がåあります。øao

ここにあるコメントセクションの例を考えると、私が見つけることができる最も近いものは翻訳機能です

一般的に使用されるアクセント付き文字の一部は、次の関数を使用して検索できます。

translate(search_terms, '\303\200\303\201\303\202\303\203\303\204\303\205\303\206\303\207\303\210\303\211\303\212\ 303\213\303\214\303\215\303\216\303\217\303\221\303\222\303\223\303\224\303\225\303\226\303\230\303\ 231\303\232\303\233\303\234\303\235\303\237\303\240\303\241\303\242\303\243\303\244\303\245\303\246\ 303\247\303\250\303\251\303\252\303\253\303\254\303\255\303\256\303\257\303\261\303\262\303\263\303\ 264\303\265\303\266\303\270\303\271\303\272\303\273\303\274\303\275\303\277','AAAAAAACEEEEIIIINOOOOOOUUUUYSaaaaaaaceeeeeiiiinoooooouuuuuyy')