2013-12-08 86 views
-1

如何獲取字符的Unicode代碼點?這是我嘗試過的,但它不是打印相同的字符,我是否正確理解unicode的工作原理?C獲取字符的Unicode代碼點

如何獲取unicode字符的值?

#include <stdio.h> 

int main() 
{ 
char *a = "ā"; 
int n; 
while(a[n] != '\0') 
{ 
    printf("%x", a[n]); 
    n+=1; 
} 
printf("\n \uC481"); 
return 0; 
} 
+0

你的代碼的輸出將很大程度上取決於單個非ASCII字符''是如何存儲在你的代碼中的:按照你本地編輯器的代碼頁的擴展ASCII,如UTF-8(它不能被存儲到一個單一的'char',或16位Unicode(大多數編譯器無法編譯,也不能存儲在char中) – usr2564301

回答

1

首先,在代碼中幾乎沒有更正。

#include <stdio.h> 

int main() 
{ 
char *a = "ā"; 
int n = 0; //Initialize n with zero. 
while(a[n] != '\0') 
{ 
    printf("%x", a[n]); 
    n+=1; 
} 
//\u will not work. To print hexadecimal value, use \x 
printf("\n %X\n\", 0xC481); 
return 0; 
} 

在這裏,你要打印的每個字節的十六進制值。這不會超過0xff的字符的Unicode值。

unsigned short是最常用的數據結構,用於存儲Unicode值,儘管它不能存儲所有的代碼點。如果您需要存儲所有Unicode點,請使用必須爲32位的int

字符的Unicode值是以UTF-32表示的每個字符的數字值。否則,如果編碼是UTF-8或UTF-16,則必須從字節序列計算。

+1

「int」只需要至少16位,'unsigned long'或' uint32_t'可能更好。'wchar_t'更有可能獲得Unicode代碼點,儘管它在Windows系統上通常爲16位。 –

相關問題