良い資源のための学習に異なる種類の文字エンコーディングおよび変換し
-
05-07-2019 - |
質問
ひとついかがコンセプトの文字エンコーディングです。のエンコードの取り扱いメモリとコードが邪魔板私に気がついていないだけというコピーの例からわずにインターネットが真に理解でいます。もうとして指を切りそうになったのは本当に重要かに見落としがあの車のようななか、私も含めた.
しているためには、資源のための学習に異なる種類の文字エンコーディングおよび変換しい(好ましくはクライアントまで、フルのC#).両方の書籍やオンライン資源を歓迎します。
感謝。
編集1:
の対応です。私は特に見ても詳細情報を伴う。純ハエンコーディングです。かんなんですが、どをお願いします。かん"としてどのようにエンコーディングをで表されるいはC#の文字列のクラスかどうかはクラス自体で管理できるので別のエンコーディング種類が別の授業です。
解決
さんまずはこの質問: う。
- の論理的アイデンティティa codepoint.Unicode員番号を各キャラクターだけるように、必ずいずれかに関連するビット/バイトです。エンコーディング(UTF-8)を定義するマッピングをbyte値です。
- のビットやバイト:の 符号化された形式.一つ以上のバイト配codepoint、価値観が定めるエンコードを使います。
- 五画面:a グラフェン.のグラフェンが作成された一又は複数のcodepoints.このものは、発表終了にはなりえない。
このコード変換 in.txt
から windows-1252
へ UTF-8
保存して out.txt
.
using System;
using System.IO;
using System.Text;
public class Enc {
public static void Main(String[] args) {
Encoding win1252 = Encoding.GetEncoding(1252);
Encoding utf8 = Encoding.UTF8;
using(StreamReader reader = new StreamReader("in.txt", win1252)) {
using(StreamWriter writer = new StreamWriter("out.txt", false, utf8)) {
char[] buffer = new char[1024];
while(reader.Peek() > 0) {
int r = reader.Read(buffer, 0, buffer.Length);
writer.Write(buffer, 0, r);
}
}
}
}
}
二つの変化が起こる。最初のバイトが復号化されるから windows-1252
へ UTF-16
(リトルエンディアンだと思い)の char
バッファです。そのバッファに変換する UTF-8
.
Codepoints
一部の例のコードポイント:
- U+0041は ラテン大文字A (A)
- U+00A3は ポンドサイン (£)
- U+042Fは キリル文字大文字屋 (Я)
- U+1D50Aは 数理FRAKTUR資G (𝔊)
エンコーディング
どこでもお作字していただけることでしょうエンコードの何らかの形で残るだろう。C#用にUTF-16、 char型, は、アクティビティとして定義しま16ビット幅です。
のようなものと考えることができるエンコードとして表形式のマッピングをcodepointsやバイトの表現となります。
CODEPOINT UTF-16BE UTF-8 WINDOWS-1252
U+0041 (A) 00 41 41 41
U+00A3 (£) 00 A3 C2 A3 A3
U+042F (Ya) 04 2F D0 AF -
U+1D50A D8 35 DD 0A F0 9D 94 8A -
の システム。います。エンコード クラス紹介種類の方法を行う小さなものに過ぎません。
Graphemes
の覚めさせていただきました画面が構築された複codepoint.文字のe-急性(é)で表される二codepoints, ラテン小文字E U+0065と 組み合わせ急アクセント U+0301.
('é'は常に代表されるシングルcodepoint U+00E9.きかんたんに切り替えることをノーマライゼーションないすべての組み合わせ配列は単一の文字に相当すが。)
結論
- ときにエンコード、C#の文字列をエンコードは、変換を実行するからUTF-16にするエンコーディングです。
- エンコードするデータの損失の変化にほとんどの非Unicodeエンコーディングでエンコードのサブセットは既存の文字です。
- となっているわけではないため、すべてのcodepointsできるステッピングモーターの使用にシングルC#charの数字文字列が数以上のcodepointsのcodepointsより大きくなる可能性があるの描画されるgraphemes.
- の"長さ"の文字列はコンテキスト依存が必要となりを知ることの意味とだけを使用、適切なアルゴリズムです。どのようにして取り扱いが定義されたプログラミング言語だけます。
- をLatin-1キャラクタ同一の値をもつ多くのエンコーディングはあの人が剥のASCII。
(ちょっとり冗長によっ意がなければ、おそらくよかったので、私は停止します。しっかりとしたもの冗長 ポストにJavaエンコーディングこちら.)
他のヒント
Wikipediaには良い説明の文字エンコーディング一般 http://en.wikipedia.org/wiki/Character_encoding.
場の詳細はUTF-8の文字エンコーディングを読んで、 UTF-8のUnicode FAQ.
していった指摘の通り、 "最小限にすべてのソフトウェア開発者も積極的に知らなければならないUnicodeの文字セット(申し訳が立ちません!)" は非常に良い初心者のチュートリアルです。
あの有名なジョエル条項"を最小限にすべてのソフトウェア開発者も積極的に知らなければならないUnicodeの文字セット(申し訳が立ちません!)" http://www.joelonsoftware.com/articles/Unicode.html
編集:にあるが、テキスト形式で、再読しょうねりのようなhtmlエンコーディングとurlエンコーディング?るための特殊文字のエスケープする重要な意味内htmlまたはurl(例えば < と>htmlですか?や=url)