[英]Decode Unicode (Korean) characters in C
我正在用C語言制作Web服務器。 我需要從網址獲取參數進行計算。 問題是人們可以輸入Unicode字符的一個字段(名稱)。 但是,當我的服務器收到該請求時,這些unicode字符變成我不明白的東西。 例如:
http://192.168.1.1:10001/reg_me?name=박우중&studentid=2012003427
變成
http://192.168.1.1:10001/reg_me?name=%EB%B0%95%EC%9A%B0%EC%A4%91&studentid=2012003427
所以我無法獲得那個領域。 我有什么辦法可以解碼這些奇怪的字符以獲得原始字符?
因此,這里有一些C代碼可以完成我在注釋中提到的事情。 假設您只是在上面得到一個字符串,例如"%EB%B0%95%EC%9A%B0%EC%A4%91"
parse(char * in, char * out){
strtok(in, "%"); // Note, the first token is empty, because the first character is a delimiter
char *token;
while(token = strtok(NULL,"%)){
unsigned c;
sscanf(token, "%x", c);
if(c > 0xFF) return -1;
*out++=c;
}
*out++ = '\0';
return 0;
}
它是原始的解析器,但對於這個簡單的問題應該做得很好。 我確定這已經存在
我已經將您的三個韓文標記保存到一個名為korean的文件中,並將其放置在我從以下C源代碼生成的可執行文件的旁邊:
#include <stdio.h>
int main( ) {
FILE * fp;
fp = fopen( "korean", "r" );
if ( fp == NULL ) {
printf( "Failure at line %d\n", __LINE__ );
return -1;
}
int currentchar;
while ( ( currentchar = fgetc( fp ) ) != EOF ) {
printf( "%%%X ", currentchar );
}
putchar( 10 );
return 0;
}
前兩個百分號%%
僅在我的%X
之前有一個百分號,它將以十六進制的十六進制大寫形式輸出currentchar
。 您可以將其視為%
特有的轉義序列。 輸出為:
%EB %B0 %95 %EC %9A %B0 %EC %A4 %91
如您所知,這正是您報告的順序。 您可以使用此事實將這些值解碼回韓文字符。 讓我們還原該過程; 將帶有百分號且沒有空格的百分號編碼序列保存到文件中,將文件命名為percentencoded ,然后使用以下C源代碼:
#include <stdio.h>
int main( ) {
FILE * decodee;
FILE * percentencoded;
decodee = fopen( "decodee", "w" );
percentencoded = fopen( "percentencoded", "r" );
if ( decodee == NULL || percentencoded == NULL ) {
printf( "Failure at line %d\n", __LINE__ );
return -1;
}
int currentchar;
while ( fscanf( percentencoded, "%%%X", ¤tchar ) == 1 ) {
fputc( currentchar, decodee );
}
putchar( 10 );
return 0;
}
進行百分比編碼的文件中包含以下內容:
%EB%B0%95%EC%9A%B0%EC%A4%91
現在,生成的文件解碼器內部具有以下內容:
박우중
我希望這可以以某種方式對您有所幫助...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.