簡體   English   中英

字符編碼獨立字符交換

[英]Character Encoding independent character swap

當我想反轉一個字符串時,我喜歡使用這段代碼。 [當我不使用std::string或其他內置功能C ]。 作為初學者,當我最初想到這一點時,我想到了ASCII表。 我認為這也可以與Unicode一起使用。 我假設由於值的差異(ASCII等)是固定的,因此可以正常工作。

是否有任何字符編碼無法在其中使用?

char a[11],t;
int len,i;
strcpy(a,"Particl");    
printf("%s\n",a);
len = strlen(a);
for(i=0;i<(len/2);i++)
{
    a[i] += a[len-1-i];
    a[len-1-i] = a[i] - a[len-1-i];
    a[i] -= a[len-1-i];
}
printf("%s\n",a);

更新:

鏈接與該問題相關,是信息豐富的。

這不適用於某些(不一定是全部)代碼點需要多個char單位表示的編碼,因為您是逐字節地而不是逐個代碼點地反轉。 對於通常的8位char這包括可以表示所有Unicode的所有編碼。

例如:在UTF-16BE中,字符串“ hello”映射到字節序列00 68 00 65 00 6c 00 6c 00 6f 應用於此字節序列的算法將產生序列6f 00 6c 00 6c 00 65 00 68 00 ,這是字符串“漀氀氀攀梔”的UTF-16BE編碼。

情況變得更糟-在所有情況下,對Unicode字符串逐個代碼點反轉仍然無法產生正確的結果,因為Unicode具有許多作用於周圍環境的代碼點,而不是單獨作為字符。 舉一個簡單的例子,對包含“ U + 0308 COMBINING DIAERESIS”的字符串“Spın̈alTap”進行代碼點反轉將產生“ paTlänıpS”,請問透尿症如何從N遷移到A? 在包含雙向覆蓋或聯合jamo的字符串上逐個代碼點反轉的后果將更加可怕。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM