1. 程式人生 > >用C語言實現中文到unicode碼的轉換

用C語言實現中文到unicode碼的轉換

由於本人喜歡用Notepad++編輯器,該編輯器的好處是小巧靈活,但是有幾個地方做的不足,但是我都能夠很好的採取相應的措施來替代,下面讓我們看看Notepad++有哪些地方的不足,進而採取怎樣的措施。

一:Notepad++不能開啟16進位制檔案,UE可以實現;

常用解決:我們常用的Beyond Compare 4(文字比較)可以輕鬆代替Notepad++不能看16進位制的問題。

Notepad++不能實現對字母,漢字轉換成ascii碼,uniconde碼。用UE可以輕鬆代替。

常用解決方法:如下面程式碼所寫的,在linux命令下編譯生成可執行檔案,然後就可以運行了,就能實現你相應的功能轉換,我寫這個小工具是為了方便我自己用。

有些朋友就不明白了,既然UE能夠那麼好的實現功能,你為什麼不選擇用UE,所以我在這裡我得說下,這看個人喜好,我喜歡Notepad++,小巧,介面直觀,免費。

把中文轉換成uniconde碼:main.c

#include <stdio.h>

#include <string.h>
#include <math.h>
#include <wchar.h>

int main()
{
   wchar_t *chinese_str = L"網路人VS灰鴿子";
  unsigned int *p = (wchar_t *)chinese_str;
  int i;
  printf("Uniocde: \n");
  for (i = 0; i < wcslen(chinese_str); i++)
  {
  printf("0x%x ", p[i]);

  }

printf(" \n");

    return 0 ;

}

編譯:gcc -finput-charset=GBK -fexec-charset=UTF-8 -o main main.c 

上面的編譯命令你照做就可以了,如果你不帶上面的引數編譯會報錯,如下:

 main.c:8:24: error:   converting to execution character set: Invalid or incomplete multibyte or wide character

這是編碼的問題,如果你在windos上編寫程式碼儲存的格式是GBKgcc的編碼格式預設是UTF-8

原始檔用不同的編碼方式編寫,會導致執行結果不一樣。

man gcc , /charset     /*檢視gcc的編碼格式解析編碼和執行編碼*/
-finput-charset=charset  表示原始檔的編碼方式, 預設以UTF-8來解析
-fexec-charset=charset   表示可執行程式裡的字時候以什麼編碼方式來表示,預設是UTF-8

./main 

Uniocde: 
0x7f51 0x7edc 0x4eba 0x56 0x53 0x7070 0x9e3d 0x5b50 

!!!!上面編碼可以測試。在PC機上開啟一個記事本然後把程式寫上去,另存為不同的格式。可以自行嘗試。自行測試後更能夠加深你的理解。

實現對字元和ascii碼之間的轉換(寫的不是很精簡)

/* gets example */
#include <stdio.h>
#include <string.h>
#include <stdlib.h>


void print_usage(char *file)
{
/* gets example */
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void print_usage(char *file)
{
  printf("%s c/a\n",file);
}
int main(int argc,char **argv)
{
  char str;
  int  cnt;


  if(argc!=2)
{
print_usage(argv[0]);
return -1;
}

if(strcmp(argv[1],"c")==0)
{
   printf ("Insert your ascail: ");
   scanf("%x",&cnt);
   printf ("Your Ascail is: %d  0x%x '%c'\n",cnt,cnt,cnt);
}
if(strcmp(argv[1],"a")==0)
{
  printf ("Insert your char: ");
 scanf("%c",&str);
 printf ("Your Ascail is: %d  0x%x  '%c'\n",str,str,str);
}
 return 0;
}
編譯:  gcc main.c -o mian      

相關推薦

C語言實現中文unicode轉換

由於本人喜歡用Notepad++編輯器,該編輯器的好處是小巧靈活,但是有幾個地方做的不足,但是我都能夠很好的採取相應的措施來替代,下面讓我們看看Notepad++有哪些地方的不足,進而採取怎樣的措施。

不依賴任何系統API,c語言實現gbk/utf8/unicode編碼轉換

轉載地址:https://blog.csdn.net/bladeandmaster88/article/details/54837338 漢字'我' Unicode編碼是0x6211       01100010 00010001 UTF8編碼是&

整型陣列處理演算法(十四)不用庫函式,C語言實現將一整型數轉換成字串

不用庫函式,用C語言實現將一整型數轉換成字串,如:int a=123456,轉換成"123456"。 如題,要求將一整型數轉換為字串。這裡要考慮的是整型數可能是負數、正數和0。 實現如下: char

C語言實現字母之間的大小寫轉換

題目要求 編寫一個程式,可以一直接收鍵盤字元,如果是小寫字元就輸出對應的大寫字元,如果接收的是大寫字元,就輸出對應的小寫字元,如果是數字不輸出。 程式分析 看到“接受字元”想到scanf函式,但題設中不只輸入一次而且輸入型別也不同(%c %d),那麼定義就只能

C語言實現websocket服務器

sockaddr extend ++i set strlen ner ace == perl Websocket Echo Server Demo 背景 嵌入式設備的應用開發大都依靠C語言來完成,我去研究如何用c語言實現websocket服務器也是為了在嵌入式設備中實現一個

C語言實現:將三個數按從大到小輸出。

temp clas 實現 ima 編程 程序 c語言實現 從大到小 code 這個題目用編程來實現非常簡單,由於我在上一篇博客中已經介紹過使用“冒泡排序”的方法。 所以我在這裏直接給出使用“冒泡排序”寫出的代碼: #include<stdio.h> int m

C語言實現:將數組A中的內容和數組B中的內容進行交換(數組一樣大)。

image pri 之前 es2017 sys 變量 ret 只需要 題目 之前我們已經完成了對兩個變量內容進行交換的程序,這兩道題目大同小異,不過是將兩數變成了兩數組。 可能我們會想:我們是不是需要第三個數組作為中間變量進行交換操作? 答案是no,我們只需要通過一個循環體

C語言實現窗口抖動

clu 變量 win 句柄 span nbsp idt 兩個 spa #include "stdafx.h" #include <stdio.h> #include<Windows.h> int main() { int s

圖書管理系統 [c語言實現] [全部代]

要求 不解釋 height next malloc 管理 stdin fflush ext 直接上代碼不解釋 #include <stdio.h> #include <stdlib.h> #include <string.h>

Linux終端程序c語言實現改變輸出的字的顏色

光標位置 高亮 AI 藍色 屬性 用c語言實現 TE c語言 說明 顏色代碼: 格式: echo "\033[字背景顏色;字體顏色m字符串\033[0m" 例如: echo "\033[41;36m something here \033[0m" 其中41的位置代表

c語言實現日誌功能

windows.h 用c語言實現 pause truct argc ifdef open info oid // 參考鏈接 // C語言實現寫入日誌文件 https://blog.csdn.net/sunlion81/article/details/8647028 #

c++語言實現出四則運算的題

using div style cin 隨機函數 color 地方 switch ase 設計思路 1.利用隨機函數 隨機兩個兩位數 2.用其中一個數除以4取余函數 0 1,2,3 用switch語句分表代表加、減、乘、除。 3.輸出式子 4.利用for循環實現題的量增 5

約瑟夫環的c語言實現(代實現

def 數字 com max std urn img pri c語言實現 # include <stdio.h> #define MAXLEN 20 int front=MAXLEN-1;//隊列初始化 int rear=MAXLEN-1; enqu

c語言實現單鏈表的逆序輸出

<span style="font-family: Arial, Helvetica, sans-serif;">可以用遞迴,如果沒到連結串列尾,則遞迴查詢,否則輸出當前值。下面只是演算法表示,不能直接放到程式裡編譯執行。</span><span style="fo

atoi函式的用法及C語言實現ato

庫函式原型: #inclue <stdlib.h> int atoi(const char *nptr); 用法:將字串裡的數字字元轉化為整形數。返回整形值。 注意:轉化時跳過前面的空格字元,直到遇上數字或正負符號才開始做轉換,而再遇到非數字或字串結束時('/0')才結束

C語言實現最小二乘法演算法

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

C語言實現字串倒序

程式: #include <stdio.h> #include <stdlib.h> #include <string.h> int fun(char *w) { char t, *s1,*s2; int n = strlen(

c語言實現一個簡單的通訊錄

通訊錄的c語言實現原始碼 簡單通訊錄的實現還是包括三個原始檔,test.c(實現通訊錄主邏輯),txl.c(實現用到的各個函式),txl.h(存放txl中用到的各種標頭檔案與宣告)。 txl.h #ifndef __TXL_H__//**txl.h** #defi

Problem Description——c語言實現素數的判定

Problem Description 對於表示式n^2+n+41,當n在(x,y)範圍內取整數值時(包括x,y)(-39<=x<y<=50),判定該表示式的值是否都為素數。 Input 輸入資料有多組,每組佔一行,由兩個整數x,y組成,當x=0,y=0時,表示輸入結束,該

c語言實現列印日曆

只要輸入年份就能打印出相應的日曆 #ifndef MAIN_H #define MAIN_H #include "stdio.h" #include "math.h" #include "stdlib.h" //獲取某一個月的最大天數 int monthday(int, int);