問題タブ [multibyte-characters]
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.
visual-studio - Visual Studio の「文字セット構成」とエンコーディング スキームの関係は?
マイクロソフトが述べたように:
マルチバイト文字セット、特に 2 バイト文字セット (DBCS)。マルチバイト文字セットは、多くのアジア言語で多数の文字を表す手段を提供します。
DBCS コード ページは、日本語や中国語などの言語に使用されます。このようなコード ページでは、一部の文字に 2 バイト エンコーディングがあります。
したがって、上記に基づいて、矛盾する結果が得られます: (4 つのすべての可能なケースのうち 2 つ、4 つのうち 3 つのケースの下で 3 つの質問があります)
したがって、ケース 1 (矛盾):
- を選択する
Use Multi-Byte Character Set
と、次のように DBCS エンコーディングが自動的に選択されます。
string chineseString = "我是路人";
しかし代わりにコンパイラは言った:
警告 C4566: ユニバーサル文字名 '\u6211' で表される文字は、現在のコード ページでは表現できません (1252)
1252 は西洋言語のエンコーディングのみであるため、これは構成自体と矛盾しています。ここで MBCS/DBCS を使用することになっていませんか?
ケース 2 (理解できる、矛盾しない):
- 「Unicode 文字セットを使用」を選択します
ここで、エンコーディングを指定する必要があると想定しているので、次のようにします。
string chineseString = u8"我是路人"
これは機能し、私にとって理にかなっています。
ケース 3(矛盾):
- 「マルチバイト文字セットを使用」を選択します。
wstring chineseStringW = L"我是路人"
エンコーディングDBCSを使用していますか?もしそうなら、なぜstring
DBCS を取り上げないのでしょうか? または単に\u6211
収まるからwchar_t
ですか?
ケース 4:
- 「Unicode 文字セットを使用」を選択します。
wstring chineseStringW = L"我是路人"
それで、エンコーディングはUTF16-LEになりましたか?
c - cで「」または「」を使用してchar変数を宣言することの違い
違いは何ですか
char がどのように多くの文字を許可できるかについても混乱しています。string と char の違いは何ですか。
javascript - splice によるテキスト置換は、スマイル (またはマルチバイト文字) では機能しません。
複雑な置換アルゴリズムに問題があります。最終的に、問題をこの最小限のコードに減らすことができました。
私の入力は"test hello test world"
で、期待される出力は ですが"REPLACEMENT hello REPLACEMENT world"
、実際には"REPLACEMENT hello tREPLACEMENTworld"
です。Twitter API から、JavaScript にはバイト位置と char インデックスを処理する奇妙な方法があることを思い出すことができます。したがって、問題はスマイリーによって気づかれずに引き起こされます。
置換が期待どおりに機能するように、コードを修正するにはどうすればよいですか? おまけの質問 なぜそれが起こっているのですか?