問題タブ [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.
.net - XMLをSQLServerに挿入するときに「エンコーディングを切り替えることができない」エラーを解決する方法
XML列(SQL SERVER 2008 R2)に挿入しようとしていますが、サーバーから次のようなメッセージが表示されます。
System.Data.SqlClient.SqlException(0x80131904):
XML解析:1行目、文字39、エンコーディングを切り替えることができません
挿入を成功させるには、XML列がUTF-16である必要があることがわかりました。
私が使用しているコードは次のとおりです。
オブジェクトをシリアル化してUTF-8文字列にする方法を教えてください。
編集:わかりました、混乱して申し訳ありません-文字列はUTF-8である必要があります。あなたは正しかった-デフォルトではUTF-16であり、UTF-8に挿入しようとすると合格します。したがって、問題はUTF-8にシリアル化する方法です。
例
これにより、SQLServerに挿入しようとしたときにエラーが発生します。
これはしません:
アップデート
Xml
SQL Server 2008の列タイプにutf-8が必要な場合、およびencoding
挿入しようとしているxml仕様のプロパティにutf-16がある場合を把握しました。
を追加する場合はutf-8
、次のようにSQLコマンドにパラメーターを追加します。
前の行にxmlValueToAddを追加しようとするとencoding=utf-16
、挿入時にエラーが発生します。また、VarChar
国の文字が認識されないことを意味します(疑問符として表示されます)。
utf-16をdbに追加するには、または前の例で使用するSqlDbType.NVarChar
かSqlDbType.Xml
、タイプをまったく指定しないでください。
sqlite - SQLite-特殊記号(商標、...)をテーブルに挿入します
商標などの特別な記号をSQLiteテーブルに挿入するにはどうすればよいですか?PRAGMA encoding="UTF-16"を効果なしで使用しようとしました:(
c - UTF-16デコーダーが期待どおりに機能しない
UTF-16を生のUnicodeコードポイントにデコードするUnicodeライブラリの一部があります。ただし、期待どおりに機能していません。
コードの関連部分は次のとおりです(UTF-8と文字列操作のものを省略):
それはどのように機能しますか?
string
は32ビット値を保持する構造体であり、string16
UTF-16のような16ビット値用です。必要に応じupush
て、完全なUnicodeコードポイントをstring
メモリに再割り当てするだけです。
u16tou
私が焦点を当てている部分です。をループし、string16
通常どおり非サロゲート値を渡し、サロゲートペアを完全なコードポイントに変換します。置き忘れた代理人は無視されます。
ペアの最初のサロゲートでは、下位10ビットが左に10ビットシフトされ、最終的なコードポイントの上位10ビットが形成されます。もう一方のサロゲートでは、最下位10ビットがファイナルに追加されてから、文字列に追加されます。
問題?
最高のコードポイントを試してみましょう。
U+10FFFD
、最後の有効なUnicodeコードポイントは0xDBFF 0xDFFD
、UTF-16のようにエンコードされます。それをデコードしてみましょう。
(表示されてutoc
いません。動作していることはわかっています(以下を参照))関数を使用してchar *
、印刷用にUTF-8に変換し直すと、結果U+0FFFFD
ではなく、取得していることが端末で確認できますU+10FFFD
。
電卓で
gcalctoolですべての変換を手動で実行すると、同じ間違った答えが返されます。したがって、私の構文自体は間違っていませんが、アルゴリズムは間違っています。アルゴリズムは私には正しいように思えますが、それでも間違った答えで終わっています。
私は何が間違っているのですか?
html - HTMLの漢字に対応するために、UTF-8からUTF-16に変更する必要がありますか?
ASP.NET MVC、MS SQL、IISを使用しています。プロフィール情報に漢字を使用しているユーザーが何人かいます。ただし、この情報を表示すると、として表示されæŽå¼·è¯
ますが、データベースでは正しいです。現在、HTMLページのUTFはUTF-8に設定されています。UTF-16に変更する必要がありますか?これから生じる可能性のあるいくつかの問題があることを理解していますが、私の選択は何ですか?
git - git gui-UTF16を表示させることはできますか?
git gui
どういうわけかUTF16ファイルのdiffを表示および表示する方法はありますか?
いくつかの情報を見つけましたが、これは主にGUIではなくコマンドラインを参照しています。
java - Java char プリミティブが 2 バイトのメモリを占有するのはなぜですか?
Java char プリミティブ データ型が 1 バイトの C とは異なり、2 バイトである理由はありますか?
ありがとう
javascript - Javascript と HTML: ファイルを BOM なしの UTF-8 として保存する
ボタンをクリックするだけで、生成された HTML Web ページ (「新しいページ」と呼びます) を保存できる MSIE のみの HTML ページ (「タイトル ページ」と呼びます) を作成しようとしています。
私が見つけたのは、表示される [名前を付けて保存] ダイアログ ボックスで、[新しいページ] を BOM なしの UTF-8 として保存できないことです。代わりに、Unicode(UTF-8) として保存され、ブラウザが UTF-16 であると判断します。以下は「タイトルページ」のサンプルコードです。
http://web-sniffer.net/で「新しいファイル」を確認したところ、「新しいファイル」が次のように保存されていることがわかります。
私の側で「新しいページ」をUTF-16として保存しないようにするためにできることはありますか? それともコードとは関係ありませんか?
また、[名前を付けて保存] ダイアログ ボックスには、文字エンコードを変更できると思われるドロップダウンがありますが、実際には、[新しいページ] ではなく [タイトル ページ] を保存するだけです。
base64 - 効率的なバイナリから文字列へのフォーマット(base64と同様ですが、UTF8 / UTF16の場合)?
私は16から4096バイトの範囲のバイナリデータの束をたくさん持っています。これらはデータベースに保存する必要があり、ユニットとして簡単に比較できるはずです(たとえば、長さが一致し、すべてのバイトが一致する場合にのみ、2つのデータバッチの束)。文字列はそのために便利ですが、バイナリデータを盲目的に文字列に変換すると、文字エンコード/再解釈の問題が原因で問題が発生する傾向があります。
Base64は、7ビットASCIIが標準であった時代に文字列を格納するための一般的な方法でした。その33%のスペースペナルティは少し厄介でしたが、ひどいものではありませんでした。残念ながら、UTF-16を使用している場合、スペースペナルティは166%(3を格納するために8バイト)であり、かなり厄介なようです。
バイナリデータを有効なUnicode文字列に保存するための一般的な保存方法はありますか?これにより、UTF-16の効率が向上します(UTF-8ではそれほどひどくなりません)。ベース32768コーディングでは、16文字で240ビットが格納され、32バイトのUTF-16または48バイトのUTF-8が必要になります。比較すると、base64コーディングでは40文字が使用され、80バイトのUTF-16または40バイトのUTF-8が必要になります。UTF-8またはUTF-16で同じスペースを使用するように設計されたアプローチでは、UTF-8またはUTF-16のいずれかで8バイトを使用する3文字で48ビットを格納し、いずれかのUTFの40バイトで240ビットを格納する場合があります。 -8またはUTF-16。
そのようなものの基準はありますか?
c++ - Microsoftは、UTF-16がC++標準ライブラリの実装における可変長エンコーディングであるという事実をどのように処理しますか
可変長エンコーディングを持つことは、標準では間接的に禁止されています。
だから私はいくつかの質問があります:
標準の次の部分はどのように処理されますか?
17.3.2.1.3.3ワイド文字シーケンス
ワイド文字シーケンスは、TA [N]として宣言できる配列オブジェクト(8.3.4)Aです。ここで、Tはタイプwchar_t(3.9.1)であり、オプションでconstまたはvolatileの任意の組み合わせで修飾されます。配列の最初の要素には、いくつかの述語によって決定された要素までの内容が定義されています。文字シーケンスは、最初の要素を指定するポインタ値Sで指定できます。
NTWCSの長さは、終了するヌルワイド文字の前にある要素の数です。空のNTWCSの長さはゼロです。
質問:
basic_string<wchar_t>
- どのように
operator[]
実装され、何が返されますか?- 標準:
If pos < size(), returns data()[pos]. Otherwise, if pos == size(), the const version returns charT(). Otherwise, the behavior is undefined.
- 標準:
size()
要素の数または文字列の長さを返しますか ?- 標準:
Returns: a count of the number of char-like objects currently in the string.
- 標準:
- どのように機能し
resize()
ますか?- 標準とは無関係に、それは何をするのか
insert()
のポジション、erase()
およびその他のポジションはどのように処理されますか?
cwctype
- ここにあるほとんどすべて。可変エンコーディングはどのように処理されますか?
cwchar
getwchar()
明らかにプラットフォーム文字全体を返すことはできませんが、これはどのように機能しますか?
さらに、残りのすべてのキャラクター機能(テーマは同じです)。
編集:確認を得るために賞金を開きます。私はいくつかの明確な答え、または少なくともより明確な投票の分布を得たいと思っています。
編集:これは無意味になり始めています。これは完全に矛盾する答えでいっぱいです。外部エンコーディングについて話す人もいます(私はそれらを気にしません。UTF-8でエンコードされたものは、文字列に読み込まれるとUTF-16として保存され、出力も同じです)、残りは単に互いに矛盾します。:-/
ruby-on-rails - Ruby on Rails と utf-16
翻訳者がアラビア語の翻訳を送信できるようにする翻訳スクリプトを持っていますが、何らかの理由で Ruby がエンコーディングを好みません。送信されたテキストを utf-16 としてエンコードする方法はありますか?