什麼是代理塊?
Unicode代碼點在U+D800
到U+DFFF
範圍內,包括,其被保留用於爲UTF-16的替代物獨佔使用,並且在任何其它情況下非法的。
它們是指示4字節代碼點的UTF-16代碼嗎?
是的。
是否#xXXXX在此處引用代碼點或UTF-16編碼值?
實際的Unicode碼點。考慮到Char
的定義包含值> #xFFFF,其中單個編碼的UTF-16值不能超過。 UTF是代碼點值的字節編碼方案。 XML規範是根據代碼點編寫的,而不是編碼。爲了存儲和傳輸,XML文檔可以用XML prolog的「encoding」屬性中指定的任何字符集進行編碼,但實際的XML內容是按未編碼的代碼點處理的。
如果它涉及到代碼點,並且我對代理塊的理解是正確的:爲什麼在此提到代理塊?
替代碼點是保留的,不允許在任何文本內容中出現未編碼。 Char
定義只是執行該規則。
爲什麼非字符如「U + FFFE」被定義爲unicode標準的一部分?就我的理解而言,字節順序檢測(以及處理靈活大小的代碼字)取決於編碼。
因爲編碼並不總是提前知道,而且可能必須動態檢測。 U+FFFE
被用作BOM標記來幫助實現這一點。 Unicode的早期版本允許U+FFFE
作爲或使用BOM或文本內容中的實際不間斷空格字符。這有時導致歧義。所以新版本的Unicode保留U+FFFE
嚴格限於BOM,並且非破壞間距由U+2060 WORD JOINER
來處理,以避免任何含糊之處。
話雖這麼說,在XML的情況下,它沒有意義的任何文本內容使用U+FFFE
。整個文檔使用特定的字符集進行編碼,所使用的任何BOM都必須出現在XML prolog之前。 XML規範定義了XML文檔本身之外的BOM處理和字符集檢測。所以這就是爲什麼Char
定義不包括U+FFFE
。
U+FFFF
被保留,並且不打算永遠在實踐中真正的內容使用。所以這就是爲什麼Char
定義排除它。
所以基本上Char
定義允許所有Unicode代碼點減去限制碼點。
你在問關於Unicode標準還是W3C的XML規範? –
關於XML規範上下文中的Unicode標準;) 第二個問題涉及XML規範中使用的表示法,但是我想在這裏理解Unicode的作用。 到目前爲止,我認爲Unicode描述了所有已知符號的集合(並給它們一個數字),並且像UTF-8這樣的編碼描述了從Unicode字符流到字節流的映射(反之亦然)。但後來我讀了這個讓我困惑的XML規範。 – Henning
http://stackoverflow.com/q/5903008/995714 –