問題タブ [multibyte-functions]

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

visual-c++ - mbstowcs によってすべての ASCII 文字が wchar_t にトランスコードされるわけではありません

同様の質問をいくつか調べましたが、問題の解決策が見つからないようです:文字をASCIIからワイド文字(Windows UTF16)に変換してウィンドウに印刷しようとしています(目的はカスタムをキャプチャすることです)一部の中国語のサポートを含む、組み込みアプリケーション用の文字セット)

mbstowcs を使用すると、文字 0x70 と 0x8F (含まれている) の間の 2 行を除いて、必要なものが得られます。これは、マルチバイト文字の最初の値に対応する必要があると思われます。

mbstowcs を使用すると、char s[5] が UTF-8 として解釈され、一部の値が最初の文字として認識されません。プロジェクト全体を変更せずに、プレーン ASCII として解釈されるように強制しますか?

MultiByteToWideChar(CP_ACP, 0, s, -1, ws, 0); も試しました。しかし、その後、どこでも同じ漢字が常に表示されるため、あまり役に立ちません...

これはテストコードであることに注意してください。

0 投票する
0 に答える
305 参照

visual-studio - WideCharToMultiByte は、レジスタへの書き込み時に漢字を生成します

IE BHO 用のこの古いコードがあり、そのデータを保存しようとしています。

私はこのアプローチを試みています:

入力した値が書き込まれ、正常に読み取ることができます。しかし、regedit で見ると、漢字が表示されます。これではトラブルシューティングが難しくなりますので、文字を正しく表記していただきたいと思います。

これは明らかに何らかのエンコーディングの問題ですが、それを解決する魔法の弾丸が見つからないようです。

ありがとう!

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

php - どんな弦も確実に回転

マルチバイト文字列とその処理方法を実験していました。ここで見ることができるコードを使用して

https://gist.github.com/charlydagos/89f67808e01f97e6de91

ほとんどの弦を回転させることに成功しました。しかし、私はその行に気づきました

$chr = mb_substr($str, $i, 1);

複数の Unicode コード ポイントを使用するため、フラグ emojisでは機能しません。

独自のシェルで次のことを試すことができます。

これにより、目的の出力が得られます。$ php string_rotate_mb.php "你好"

ただし、これは$ php string_rotate_mb.php ""戻ります[H][C]

これは技術的に正しいですが、文字列を回転させました。しかし、実際にはそれは単一のグリフであり、私の目的の出力はフラグのみです (またはフラグのシーケンスで、さらに文字化けしたグリフになり、時には別のフラグに変わることさえあります)。

$length = 1では、 を使用して、または$length = 2(または$length = N) 部分文字列を取得する必要があることを確実に判断するにはどうすればよいmb_substrでしょうか?

参考までに、 、 、 、 を使用しPHP 7.0.2 (cli) (built: Jan 7 2016 10:40:26) ( NTS )ZSH_VERSION = 5.2LC_ALL=en_us.utf-8ますiTerm2: Build 2.9.git.8dff8db518

更新 - 2016 年 2 月 5 日

解決策: https://gist.github.com/charlydagos/6755ad994da07a7b4959#file-string_rotate_working-php-L39-L56

書記素クラスターの概念を紹介してくれたroelandに感謝します。次のリンクにも良い情報があります

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

php - バイナリ データと mb_function のオーバーロードを処理していますか?

ここには、保証または「いいえいいえ!」のいずれかが必要なコードがあります。私がこれについて正しい方法で考えているのか、それとも完全に間違った方法で考えているのかについて。

これは、特定の場所でバイナリ データの変数を切り取り、マルチバイトのオーバーロードされた関数を処理する必要があります。たとえば、substris reallymb_substrstrlenismb_strlenなどです。

私たちのサーバーはUTF-8内部エンコーディングに設定されているため、このバイナリデータ操作を回避するために、この奇妙な小さなことを行います。

バイナリデータなので、入出力結果を実際に表示することはできません。しかし、上記を使用したテストはうまく機能しているようで、何も壊れていません...

しかし、私の脳の一部は「何をしているの...これはこれを処理する方法ではありません」と叫んでいます!

ノート:

  • 入ってくるバイナリ データは、そもそもこれら 2 つの部分を連結したものです。
  • 最初の部分のサイズは常にわかっています (ただし、変更されます)。
  • 2 番目の部分のサイズはまったく不明です。
  • これは、暗号化にかなり近いもので、IV を前に詰め込んで、再び剥ぎ取っています (奇妙なことに、これと同じことを行う古いコードを見つけました笑)。

だから、私の質問は次のとおりだと思います:

  • これは実際に行っても問題ありませんか?
  • それとも、私が見落としている非常に明白なものがありますか?
0 投票する
2 に答える
106 参照

php - 定義済みのアルファベットを使用してユニコードで文字列をソートする方法は?

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

regex - 文字列関数をmb文字列関数に置換して検索するphp正規表現

解決策は、先読みと後読みを調べることでした-置換を行ったときに置換が互いに食べられたため、RegExのLookAroundsの概念は私の問題を解決するのに役立ちました

そのため、私たちは古いプロジェクトのいくつかを移行するためにしばらく取り組んでおり (おそらく悪い/古いコーディング習慣)、それらを php7 対応にするために取り組んでいます。このプロセスでは、プロジェクトの .php ファイルでいくつかの調整を行ったので、たとえば

当面の問題は、php 文字列関数 (strlen、substr など) のデンマーク語文字に関するいくつかの問題に直面しており、代わりに mb_string 関数を使用したいということです。「オーバーロード」機能を使用してインターネットで読むことができるものから、行く方法ではないため、ファイルベースの検索を置き換えることにしました。

私の検索置換関数は現在このようになっています(@SeanBrightのおかげで更新されました

$file の内容は次のとおりです。

ここでのポイントは、実際の php コードが有効な構文である必要はないということです。さまざまなシナリオで機能させたかっただけです

私の正規表現の問題は、この行の理由がわからないことです:

動かない。1 番目と 3 番目の substr は正しく置き換えられますが、2 番目は次のようになります。

注意として、私の検索文字列は、関数名の前にあるあらゆる種類の文字で機能するように作成されており、関数名の後の文字は「(」である必要があります

完璧な世界では、クラスのメソッドである文字列関数も除外したいと思います。たとえば、電子メールを送信する $order->mail() です。これを $order->mb_send_mail() に変換したくありません

私の理解では、すべてのパラメーターは同じであるため、問題にはなりません。

完全なスクリプトはここにあり ます https://github.com/welracid/phpStringToMBString