問題タブ [astral-plane]
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.
unicode - Antlrで生成されたレクサーが「補足面」のUnicode文字でハングする(antlr 3.4)
私はantlr文法とantlrRubyTargetを使用してPHPコードを解析しています。私が解析しなければならないソースファイルの1つには実際に翻訳が含まれており、それらのいくつかはUnicode文字を多用しています。文法は「補足面」の1文字、つまりU+10430にかかっているようです。
Ruby antlrターゲットがかなり古く、Unicodeに準拠していなかったため、過去にも同様の問題が発生しました(当時、Rubyはそうではありませんでした)。それを解決するには、RubyTarget.java getMaxCharValueを0xFF(ascii)から0xFFFF(unicode)にバンプする必要がありました。今ではこのセットでも足りないようです。Unicodeは、この範囲外の文字は2つのUTF-16文字を使用して表すことができると述べていますが、antlrはこれをどのように管理しますか?getMaxCharValueを再度バンプすることは役に立ちますか(一度は実行しましたが、私は「試行」アプローチのファンではありません)?
ありがとう !
java - 2 つのコード単位を持つ文字で使用される Java charAt
コアJavaから、vol。1、第9版、p。69:
文字 ℤ には、UTF-16 エンコーディングで 2 つのコード単位が必要です。通話中
はスペースを返しませんが、ℤ の 2 番目のコード単位を返します。
しかし、それはスペースを返すようsentence.charAt(1)
です。たとえばif
、次のコードのステートメントは に評価されtrue
ます。
なんで?
関連する場合は、Ubuntu 12.10 で JDK SE 1.7.0_09 を使用しています。
unicode - Rebol 2 のように Rebol 3 文字列で U+FFFF を超える Unicode コードポイントを使用する方法は?
Rebol 2 では、Unicode について何も知らないため、^(FF) より大きいコードポイントの文字列でキャレット スタイルのエスケープを使用できないことはわかっています。したがって、これは何も生成しません。めちゃくちゃに見えます。
それでも、コードは Rebol 3 で機能し、次のように出力されます。
それは素晴らしいことですが、R3 は明らかに U+FFFF で文字列内の文字を保持する能力を最大限に発揮します。
この状況は、Rebol 2 が知らなかったコードポイントに遭遇したときのランダムな動作よりもはるかに優れています。ただし、独自の UTF-8 エンコーディングを行う方法を知っている場合 (またはディスクからソース コードをロードして文字列を取得した場合) は、文字列を保存するための回避策が Rebol にありました。個々のキャラクターからそれらを組み立てることができます。
したがって、U+010000 の UTF-8 エンコーディングは #F0908080 であり、前に次のように言うことができます。
そして、UTF-8 を使用してエンコードされた単一のコードポイントを含む文字列を取得し、コード ブロックでディスクに保存して、再度読み込むことができます。R3に似たようなトリックはありますか?
c# - C#コンソールで拡張Unicode文字を表示するにはどうすればよいですか?
1F0A0から1F0DFの範囲のUnicode値を持つトランプのセットを表示しようとしています。コードに4文字を超える文字を使用しようとすると、エラーが発生します。このコンテキストでこれらの文字を使用することは可能ですか?VisualStudio2012を使用しています。
char AceOfSpades ='\ u1F0A0'; 入力するとすぐに、「文字リテラルの文字が多すぎます」というエラーが表示されます。これは、UnicodeまたはUTF8エンコーディングのいずれかでも表示されます。上記のように「\u1F0A」を表示しようとすると...Unicodeでは「?」と表示されます UTF8では、3文字を表示します。
OutputEncoding string AceOfSpades = "\U0001F0A0";
Default、Unicode、ASCII: ??
UTF7:+2DzcoA-
UTF8:4つの奇妙な文字UTF32、BigEndianUnicode:IOException
のすべてのオプションを試しましConsole.OutputEncoding = System.Text.Encoding.UTF32;
たが、オプションであるにもかかわらず、コードの唯一の行であってもクラッシュします。UTF16はリストに含まれていませんでした。
使用しているUnicodeのバージョンを確認するにはどうすればよいですか?
javascript - javascriptのさまざまな範囲内のUnicode文字を削除します
以下の範囲に該当する場合、文字列内のすべての Unicode 文字を削除しようとしています。
replace
最初のプロトタイプとして、関数で正規表現を使用して、最初の範囲内の文字を削除しようとしました。
この場合、文字は正常に置き換えられたようです。
ただし、それを置き換えると
予想外のものが見えます。私の出力は次のように表示されます。
he�llo worl᷿fd は次のように置き換えられます
ここで注意すべき点が 2 つあります。
\u1dfff
1 つの文字として表示されません - 文字\u1dff
に変換さf
れ、最後にそれ自体の文字として扱われます- 結果は空の文字列です。
これをどのように達成できるかについての提案は大歓迎です。
編集
encodeURIComponent
私の全体的な目標は、関数が無効と見なすすべての文字を除外することです。いくつかのテストを実行したところ、上記のリストが無効な文字セットであることがわかりました。たとえば、次のコードでは、最初1dfff
に Unicode 文字に変換してから に渡しencodeURIComponent
、後者の関数によって例外が発生します。
@Blender がUnicode 文字を表すためにコードx
の代わりに使用していることを指摘した後、質問の一部を編集しました。u
編集2
String.fromCharacterCode
「無効な」ユニコード範囲を取得する手法をさらに調査したところ、16 ビットを超える数値を指定すると、その数値の最下位 16 ビットが参照されるだけであることが判明しました。それは私が見ていたパターンを説明しています。結局のところ、最初の範囲だけを気にする必要があります。
python - アストラル界を含む Unicode 範囲の Python セマンティクス
範囲の一方または両方のエンドポイントが BMP の外にある場合、正規表現の文字範囲の意図されたセマンティクスは正確には何ですか? Python 2.7 と 3.5 では、次の入力の動作が異なることがわかりました。
私の 2.7 では が得られFalse
、3.5 では が得られTrue
ます。後者は私には理にかなっています。前者はおそらく\U00021111
サロゲートペアで表されているためですが、それでも問題なく含まれているはずな\ud844\udd11
のでわかりません。\u1000-\ud844
\u1234
- これはどこかに指定されていますか?
- これは意図した動作ですか?
- これは Python のバージョンに依存するだけですか、それとも UTF-16 と UTF-32 に関するコンパイル時のフラグにも依存しますか?
- 大文字と小文字を区別せずに一貫した動作を得る方法はありますか?
- ケースの区別が避けられない場合、正確にはどのような条件がありますか?