我只是瀏覽四處尋找的UTF-8代碼點一些實現(不,不是抄襲)和跨this偶然發現:這個UTF-8實現是實現定義的還是定義明確的?
typedef unsigned char char8_t; typedef std::basic_string<unsigned char> u8string;
這段代碼竟然無視CHAR_BIT
只有要求至少爲8
,但可能會更大?或者在這種情況下這不重要,代碼很好?如果是這樣,那爲什麼是這樣呢?
另外,有些人(?想必SO成員@NicolBolas)寫了:
const char *str = u8"This is a UTF-8 string.";
這是非常如何UTF-8將在C++中用於字符串文字。
我以爲UTF-8中的代碼單元總是正好8位!
從Unicode標準8.0.0,第2.5章:
在Unicode字符編碼模型,精確定義的編碼 形式指定一個Unicode字符的每個整數(代碼點)是如何 被表示爲一個一個或多個代碼單元的序列。 Unicode 標準爲Unicode 字符提供了三種不同的編碼形式,使用8位,16位和32位單元。這些是 ,分別命名爲UTF-8,UTF-16和UTF-32。
(換行符去掉,就斷行連字符去掉,加上強調)
那麼,爲什麼他要求const char*
是用來代替const uint8_t*
(或建議的,假設const char8_t*
)?
@skypjack我回到我的版本。第一個代碼是一個引號,即使沒有真正的文本。 – Downvoter
這麼好的一個問題,但是引號中幾乎沒有視覺缺陷,所以我刪除了它們,沒有更多。我錯了,這是我的移動應用程序沒有正確格式化問題? – skypjack
@skypjack呃......它看起來不太好,讓我們用外交的方式來說吧。 :-) – Downvoter