タグ付けされた質問 「unicode」

Unicodeは、すべての書記体系、技術記号、句読点を組み込んだ書面に必要なすべての文字を記述するための汎用文字セットになることを目的としています。

8
さまざまな言語実装にUnicode識別子のサポートを追加する意味は何ですか?
個人的には、Unicode識別子に満ちたコードを読むのは紛らわしいと感じています。私の意見では、それはまた、コードが簡単に維持されることを防ぎます。さまざまな翻訳者の作成者がそのようなサポートを実装するために必要なすべての努力は言うまでもありません。また、Unicode識別子のサポートの欠如(または存在)が、さまざまな言語実装の(不利な)利点(本当に重要なように)のリストに絶えず気づいています。わかりません。なぜそんなに注目されているのですか?
14 unicode 

2
Unicode文字列の効率的なTrie実装
効率的な文字列トライの実装を探しています。ほとんどの場合、次のようなコードが見つかりました。 Javaでの参照実装(ウィキペディアごと) これらの実装は、主に2つの理由で嫌いです。 256文字のASCII文字のみをサポートします。キリル文字などをカバーする必要があります。 それらは非常にメモリ効率が悪いです。 各ノードには、256個の参照の配列が含まれます。これは、Javaの64ビットマシンでは4096バイトです。これらの各ノードは、それぞれ4096バイトの参照を持つ最大256個のサブノードを持つことができます。したがって、すべてのASCII 2文字列の完全なトライには1MBを少し超えるサイズが必要です。3つの文字列?ノード内の配列にのみ256MB。等々。 もちろん、トライに1600万の3文字列すべてを含めるつもりはないので、多くのスペースが無駄になっています。これらの配列のほとんどは、挿入されたキーの実際の数をはるかに超える容量があるため、単なるヌル参照です。また、Unicodeを追加すると、配列はさらに大きくなります(charの値はJavaの256ではなく64kです)。 文字列の効率的なトライを作成する希望はありますか?これらのタイプの実装に対するいくつかの改善を検討しました。 参照の配列を使用する代わりに、プリミティブ整数型の配列を使用できます。これは、サイズが実際のノードの数に近いノードへの参照の配列にインデックスを付けます。 深いツリーを犠牲にしてサイズ16のノード配列を可能にする4ビットの部分に文字列を分割できます。
12 unicode  trie 

5
「charset」が一般的な使用法で「エンコード」を本当に意味するのはなぜですか?
私を長い間混乱させてきたのは、多くのソフトウェアが「charset」と「encoding」という用語を同義語として使用していることです。 人々がユニコードの「エンコーディング」に言及するとき、それらは常にユニコード文字をASCIIやUTF-8のようなバイトのシーケンスとして表すためのルールセットを意味します。これは合理的で直感的なようです。これは、指定したルールセットを使用して、これらの文字をバイトとして「エンコード」するという考え方です。 これらのルールセットは、すべてのユニコード文字の一部のサブセットを「エンコード」する機能しか提供しないことがあるので、「文字セット」の短縮形である「文字セット」は、ユニコード文字のセットを意味するだけで、これらの文字はエンコードされます。したがって、エンコーディングは文字セットを意味します(128文字のエンコードに関するルールのみを持つASCIIのようなエンコーディングは、それらの128文字の文字セットに関連付けられます)が、文字セットはエンコーディングを意味する必要はありません(たとえば、UTF-8、UTF) -16とUTF-32はすべて異なるエンコーディングですが、同じ文字セットをエンコードできます)。 それでも-そして、これが私の質問の核心です-「charset」という単語の実際の用法は、単語の構成が意味するものと一致しません。ほとんどの場合、「エンコード」を意味するために使用されます。 例えば: charsetHTML の属性は、エンコーディングを指定するために使用されます CharsetJavaのsはエンコーディングです charsetsとcharacter setsMySQLでは、これもエンコーディングです。 この好奇心の強い(乱用)言語の使用は何歳ですか?この「直感的ではない」「文字セット」の定義はどのようにして生まれましたか?それはおそらく、実際に、使用中のエンコーディングとそれらがサポートする文字セットとの間に1対1のマッピングが実際にあった時代に由来するのでしょうか?それとも、この単語の定義を規定する特に影響力のある標準や仕様はありましたか?

1
ファイルを狂わせずに、左から右へのスクリプトと右から左へのスクリプトをどのように混合しますか?
あなたの母国語がヘブライ語であり、ヘブライ語をソースコードに入れることができるPython 3のようなプログラミング言語で作業しているとします。よかったね!あなたは持っていdictます: d = {'a': 1} そして、あなたはそれをaヘブライ語で置き換えたいです。したがって、その単一の文字を置き換えます。 d = {'א': 1} ええとああ。他の変更を行わずに1つの文字を置き換えるだけで、表示がおかしくなりました。ヘブライ語からまでのすべて1が逆向きであり、これが何を意味するかは言うまでもなく、これが有効な構文(それがそうである)であることは極めて明白ではありません。 ヘブライ語は本質的に右から左であり、目に見えない制御文字がなくても、ヘブライ語のテキストは右から左に表示されます。これは、ヘブライ語の近くにある特定の「通常の」文字、および他のいくつかのスクリプトの文字にも適用されます。詳細は複雑です。 これにどう対処しますか?制御文字をソースコードに貼り付けて、コードを壊さずに表示を修正することはできません。16進数のエスケープですべてを書き込むと、ある種の読みづらさは別の種類と交換されます。Basic Latinブロックの文字を使用してすべてに名前を付け、ローカリゼーションファイルにすべてのヘブライ語の文字列を貼り付けることを辞任したとしても、右から左へのテキストと左から右への混合を避けるのは困難です。 ヘブライ語を含むJSONまたはCSVは文字化けします。文字列を押し込んだローカリゼーションファイルが人間が読めると想定されていたとしても、おそらくそうではありません。職業はなんですか?

1
C ++のイテレータカテゴリは、UTF-8イテレータアダプタの作成を禁止していますか?
私はUTF-8イテレーターアダプターに取り組んでいます。つまり、イテレータをaに、charまたはunsigned charシーケンスをイテレータからシーケンスに変換するアダプタを意味しchar32_tます。ここでの私の仕事は、オンラインで見つけたこのイテレータに触発されました。 ただし、独自の実装を開始するときに標準を調べたところ、C ++がイテレータに課す要件に準拠しながら、このようなアダプタを実装することはできないようです。 たとえば、InputIterator要件を満たすUTF-8イテレータを作成できますか?はい。ただし、指定されたイテレータ自体がInputIteratorではない場合に限ります。どうして? InputIteratorは、同じイテレータを複数回逆参照する機能を必要とするためです。それらがすべて等しい場合、そのイテレータの複数のコピーを逆参照することもできます。 もちろん、UTF-8イテレーターアダプターを逆参照するには、基本イテレーターの逆参照と、場合によっては増分を行う必要があります。そして、そのイテレーターがInputIteratorである場合、元の値をインクリメントした後に戻すことはできません。また、コピーが機能する必要があるという事実char32_tは、以前にデコードされた値を表すをローカルに保存できないことを意味します。あなたはこれを行うことができたでしょう: auto it = ... auto it2 = it; //Copies an empty `char32_t`. *it; //Accesses base iterator, storing `it.ch`. *it; //Doesn't access the base iterator; simply returns `it.ch`. *it2; //Cannot access `it.ch`, so must access base iterator. わかりました。InputIteratorsは使用できません。しかし、ForwardIteratorはどうでしょうか?UTF-8文字シーケンスでForwardIteratorを適応できるForwardIteratorアダプターを作成することは可能ですか? またはを生成するに*itは操作が必要なため、これも問題です。InputIteratorsはに変換可能である何かを吐き出すことができますが、[forward.iterators] /1.3実際の参照を提供するために必要とされます。value_type&const value_type&value_typeForwardIterator Xが可変イテレータである場合、referenceはへの参照Tです。Xが定数イテレータの場合、referenceはへの参照ですconst T ここでの唯一の手段は、そのようなすべてのイテレータがを持ち運ぶchar32_tことです。これは、その参照用のストレージを提供するためだけに存在します。その場合でも、イテレータインスタンスがインクリメントされ、逆参照されるたびに、その値を更新する必要があります。これは古い参照を事実上無効にし、標準はそれを明示的に許可していません(無効化はイテレータが破棄された場合、またはコンテナがそうした場合にのみ発生します)。 …
8 c++  c++11  unicode  utf-8 
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.