簡體   English   中英

用C解碼Unicode(韓文)字符

[英]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", &currentchar ) == 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.

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