問題タブ [utf-16]
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.
c# - UTF-8 よりも UTF-16 を好む理由はありますか?
UTF-16 と UTF-8 の属性を調べてみると、UTF-16 を好む理由が見つかりません。
ただし、Java と C# を調べると、文字列と文字がデフォルトで UTF-16 に設定されているようです。歴史的な理由か、パフォーマンス上の理由ではないかと考えていましたが、情報が見つかりませんでした。
これらの言語が UTF-16 を選択した理由を知っている人はいますか? そして、私もそうする正当な理由はありますか?
編集:一方、私はこの回答も見つけました。これは関連性があり、興味深いリンクがいくつかあります。
python - 文字コード
私のテキストエディタでは、Ansi、UTF-8、UTF-8(BOMなし)、UTF-16LE、およびUTF-16BEのいくつかの異なる文字形式でコーディングできます。
それらの違いは何ですか?
一般的に最良のフォーマットと見なされているものは何ですか(違いが生じる場合はPythonを使用しています)?
python - pyODBCとUnicode
pyODBCを使用してMSSQL2005Expressサーバーと通信しています。データを保存しようとしているテーブルは、nvarchar列で構成されています。
変数name、birthrday、およびgendeはExcelファイルから読み取られ、Unicode文字列です。クエリを実行し、SQL Server Management Studioでテーブルを確認するか、挿入されたばかりのデータをフェッチするクエリを実行すると、英語以外の言語で書き込まれたすべてのデータが疑問符に変わります。英語で書かれたデータは保存され、正しい方法で表に表示されます。CHARSET=UTF16
接続文字列に追加しようとしましたが、うまくいきませんでした。これは正常に機能するものを使用できますUTF-8
が、動作規則として、DBに保存されているすべてのデータがである必要がありますUTF16
。
ありがとう!
mysql - Unicode char コードを使用して MySQL をクエリする
特定の列に文字 (UTF-16 コード 200E) を含むエントリを見つけようとして、MySQL テーブルを検索する際に問題が発生しました。
この特定のコードにはグリフがないため、検索用語に貼り付けようとしても機能しないようです。クエリの代わりに、それぞれのコード ポイントとして文字を指定する方法はありますか?
ありがとう - ベン
utf-16 - NewLISP を使用して中国語のファイル名の属性を見つけるには?
次の NewLISP コードは、Win32 でのファイルのファイル属性を示しています。ただし、取得されたファイル名の一部には、名前に漢字が含まれています。GetFileAttributesA 関数がそれらを検出すると、属性に -1 が返されます。GetFileAttributesW を見ましたが、関数が認識する形式で fname の内容を関数で使用できるようにする方法がわかりません。
この状況をどのように処理しますか?(私は別の言語を試してみたいと思っています)
ruby - Ruby は Mac OS X と Linux のファイル名で Unicode 文字をうまく処理しますが、なぜ Windows で動作させるのに少なくとも 2 年かかったのですか?
Ruby は Mac OS X と Linux ではファイル パスとファイル名の Unicode 文字でうまく動作しますが、Windows で動作させるにはなぜ 2 年以上かかったのですか?
私はちょうどGoogle Code Jamを見ていました。人々は、重要な問題を数時間以内に解決しています。職場では、1 日か 2 日、または数日、または 1 週間か 2 週間以内に解決できるように標準ライブラリに書き込む必要がある場合でも、Unicode 文字を含むファイル名またはパスの問題を解決することを想像できますか? でも2年?
理由は何ですか?Mac OS X と Linux は UTF-8 を使用していたので、そのまま動作する可能性があると思います。また、多くの ASCII プログラム コードは、何も変更せずに UTF-8 で正常に動作します。
Windowsはファイル名やパスをUTF-16で返しているのかもしれないのでややこしいですが、UTF-16からUTF-8へ、またはその逆に変換する機能があるので、かなり解決しやすい問題ではないでしょうか。
python - Python 3 での utf-16 から utf-8 への変換
私は Python 3 でプログラミングしていますが、小さな問題があり、ネット上でそれへの参照が見つかりません。
デフォルトの文字列がutf-16であることを理解している限り、utf-8で作業する必要があるため、デフォルトの文字列からutf-8に変換するコマンドが見つかりません。どうもありがとうございました。
c# - ASCII または UTF-16 のマーシャリングされた文字列に関するアドバイス
unsafe
土地へようこそ。
私は、ASCIIまたはUTF-16のいずれかである可能性のある長さ不明の管理されていないバイトバッファの形式で、0で終了するCスタイルの文字列を提供するレガシーライブラリに対してP/Invokeを実行していますが、その兆候はまったくありません-バイトストリーム自体以外は...
String
現在、マネージドfromChar*
またはを作成する必要があるかどうかを判断するために、シングルおよびダブル 0 バイトのチェックに基づく悪いスキームがありますSByte*
。このスキームは、 より高いすべての Unicode コードポイントで明らかに崩壊しますU+00FF
。
これは私が持っているものです:
- アンマネージド バイト バッファーのアドレス。
- アンマネージ バイト バッファの長さは不明です。
- アンマネージ バイト バッファーは、0 で終わる ASCII C スタイル文字列または 0 で終わる UTF-16 C スタイル文字列のいずれかです。
これは私が欲しいものです:
String
ASCII か UTF-16 かを問わず、アンマネージ バイト バッファから正しいマネージを作成します。
その問題は一般的に解決可能ですか?
delphi - #0を含む文字列を置き換えますか?
この関数を使用してファイルを文字列に読み取ります
これがファイルのテキストです:
LoadFileの戻り値は次のとおりです。
新しいファイルに「verabc」を含めたい。問題は、「sion」を「abc」に置き換えるのにまだ問題があることです。D2007を使用しています。#0をすべて削除すると、結果は漢字になります。
c - Windowsの16ビットwchar_tの醜さに最もよく対処するにはどうすればよいですか?
アプリケーションに仮想UTF-8環境を提供するmingwで使用するラッパーレイヤーを作成しています。ファイル名を処理する関数は、UTF-8から変換し、対応する「_w」関数などを呼び出すラッパーです。私が遭遇した大きな問題は、Windowswchar_t
が16ビットであるということです。
ファイルシステム操作の場合、それは大したことではありません。UTF-8とUTF-16の間で変換するだけで、すべてが機能します。ただし、標準のCマルチバイト/ワイド文字変換APIでは、multi-wchar_t文字は使用できません。
可能な解決策:
- UTF-8の代わりにCESU-8環境を提供します。私はこれが本当に好きではありません。
- 簡単な方法でBMPのみをサポートしてください。長さ4のUTF-8シーケンスを無効として扱います。
- ラッパーを拡張して、mingwを置き換え
wchar_t
、typedef int32_t wchar_t;
処理しWCHAR
、wchar_t
異なるものにします。これは面倒ですが、クリーンなPOSIXタイプの環境を期待し、wchar_t
Windows-APIの目的には使用しないアプリを移植するのに理想的かもしれません。 - 次のハック:
mbrtowc
wchar_t
4バイトのUTF-8文字の最初の3バイトを読み取った後、上位サロゲートに対応するを出力し、残りの状態をmbstate_t
オブジェクトに保持します。次のバイトを受信すると、それを保存された状態と組み合わせて、下位サロゲートを出力します。最後のバイトが無効になると、-1が返され(EILSEQを使用)、1つのサロゲートが出力ストリームに含まれます(不良...)。
wcrtomb
上位サロゲートを処理するときにUTF-8の最初の2バイトを出力し、残りの状態をmbstate_t
オブジェクトに保存します。その後、下位サロゲートを処理するときに、それを保存された状態と組み合わせて、UTF-8の最後の2バイトを出力します。有効なローサロゲートが受信されない場合、-1が返され(EILSEQを使用)、不完全なUTF-8シーケンスが出力ストリームに残ります(不良...)。
このハックのプラス面は、入力が有効である限り機能し、UTF-8文字、つまり可能なファイル名/引数などにアクセスできることです。アプリケーションが処理する必要のあるテキスト。
短所は、ISO Cに厳密に準拠しておらず(wchar_t
文字列をステートフルにすることは許可されていません)、誤った部分出力がすでに書き込まれるまで、不正な形式の文字の検出を遅らせることです。
私はさまざまなオプション、特に提案されたハックについてのフィードバックを探しています:それが合理的かどうか、短所が重大なエラーを引き起こす可能性があるかどうか、そしてスキームを妨げる可能性のある他の短所があるかどうか完全に機能します。また、私が考えていなかった他の可能な解決策を聞いてうれしいです。