日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

关于gedit的编码问题

發(fā)布時(shí)間:2025/3/8 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于gedit的编码问题 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

今天由于gedit的編碼格式導(dǎo)致LCD顯示屏的問題,開始沒有想到后來才發(fā)現(xiàn),在這記錄一下

#include <stdio.h> #include <unistd.h> #include <stdio.h> #include <fcntl.h> #include <linux/fb.h> #include <sys/mman.h> #include <sys/stat.h> #include <fcntl.h> #include <stdio.h> #include <stdlib.h> #include <sys/time.h> #include <sys/wait.h> #include <sys/ipc.h>#define FB_NAME "/dev/fb0" //打開的幀緩沖設(shè)備名 unsigned char *fbp = 0; //文件映射的虛擬地址指針 long screensize; //沒幀圖像的大小 struct fb_var_screeninfo vinfo; //打開的幀緩沖設(shè)備的可變參數(shù) struct fb_fix_screeninfo finfo; //打開的幀緩沖設(shè)備的不可變參數(shù) int fp; //打開的文件描述符void show_point(unsigned int x, unsigned int y, unsigned int c) {unsigned int location;//每個(gè)像素點(diǎn)的位數(shù)/8=每個(gè)像素占用的字節(jié)數(shù)location = x * (vinfo.bits_per_pixel / 8) + y * finfo.line_length;/*直接賦值來改變屏幕上某點(diǎn)的顏色注明:這幾個(gè)賦值是針對每像素四字節(jié)來設(shè)置的,如果針對每像素2 字節(jié),比如RGB565,則需要進(jìn)行轉(zhuǎn)化*/*(fbp + location) = c & 0xff; /* 藍(lán)色的色深 */ *(fbp + location + 1) = c >> 8 & 0xff; /* 綠色的色深*/ *(fbp + location + 2) = c >> 16 & 0xff; /* 紅色的色深*/*(fbp + location + 3) = c >> 24 & 0xff; /* 是否透明*/ } int fB_init (void) {fp = open (FB_NAME, O_RDWR);if (fp < 0) {printf("打開幀緩沖設(shè)備失敗\r\n");return -1;}printf("打開幀緩沖設(shè)備成功\r\n");if (ioctl(fp, FBIOGET_FSCREENINFO, &finfo)) {printf("獲得幀緩沖設(shè)備的固定參數(shù)失敗\r\n");return -1;} if (ioctl(fp, FBIOGET_VSCREENINFO, &vinfo)) {printf("獲得幀緩沖設(shè)備的可變參數(shù)失敗\r\n");return -1;}printf("識別到當(dāng)前屏幕尺寸為:%d*%d 色深:%d\r\n",vinfo.xres,vinfo.yres,vinfo.bits_per_pixel);// 計(jì)算單幀畫面占多少字節(jié)screensize = vinfo.xres * vinfo.yres * (vinfo.bits_per_pixel / 8); //把fp所指的文件中從開始到screensize大小//的內(nèi)容給映射出來,得到一個(gè)指向這塊空間//的指針fbp = (unsigned char *) mmap (0, screensize, PROT_READ | PROT_WRITE, MAP_SHARED, fp, 0);if (NULL == fbp) {printf ("把文件映射到虛擬內(nèi)存失敗\r\n");return -1;}return 0;} void fb_close(void ) {munmap (fbp, screensize); /*解除映射*/close (fp); /*關(guān)閉文件*/ }void Read_from_HZK16( const unsigned char *s, char* chs) {FILE *fp;unsigned long offset;//根據(jù)內(nèi)碼找出漢字在HZK16中的偏移位置offset = ((s[0] - 0xa1) * 94 + (s[1] - 0xa1)) * 32;printf("s[0]=%d\n",s[0]);printf("s[1]=%d\n",s[1]);printf("offset=%d\n",offset);//打開字庫文件if((fp = fopen("HZK16", "r")) == NULL)return; //文件指針偏移到要找的漢字處fseek(fp, offset, SEEK_SET); //讀取該漢字的字模fread(chs, 32, 1, fp); fclose(fp); }void show_chinese_16x16(unsigned int x, unsigned int y, unsigned int fc, unsigned int bc, const unsigned char * chs) {int i, j;char data[32];Read_from_HZK16(chs, data); //去字庫中讀取漢字字模for (i = 0; i < 32; i++) //顯示32個(gè)點(diǎn){if (i % 2 == 0)y++; //每行兩字節(jié),16X16點(diǎn)陣for (j = 7; j >= 0; j--) {if (data[i] & (0x1 << j))//描繪前景色 {show_point(x + (7 - j) + (i % 2) * 8, y, fc); //由高到低,} else //描繪背景色;{ show_point(x + (7 - j) + (i % 2) * 8, y, bc);}}} } int main(void) {fB_init (); //初始化幀緩沖設(shè)備show_chinese_16x16(0, 0, 0xf80000ff, 0x0, "中");show_chinese_16x16(16, 0, 0xf80000ff, 0x0, "華");fb_close(); //關(guān)閉幀緩沖設(shè)備return 0; }

上面是我在tiny4412開發(fā)板上測試LCD屏的代碼,但是當(dāng)我改變顯示的數(shù)據(jù)時(shí)出現(xiàn)了問題,顯示的不是我想顯示的字,很奇怪啊!為什么會(huì)這樣,兩個(gè)一模一樣的代碼卻表現(xiàn)出來不一樣的結(jié)果。

開始考慮是從字庫取模時(shí)的問題,但是仔細(xì)檢查并沒有發(fā)現(xiàn)錯(cuò)誤,然后把正確代碼和錯(cuò)誤代碼的偏移量打印出來,僅僅看出來兩個(gè)的偏移量不同,目前為止還是找不到原因。

從串口的顯示發(fā)現(xiàn)了端倪,看圖:

一模一樣的代碼,為什么一個(gè)是正確,一個(gè)是亂碼,考慮是我使用gedit編輯保存的,應(yīng)該是編碼格式的問題,修改文件的編碼格式

在LINUX上進(jìn)行編碼轉(zhuǎn)換時(shí),可以利用iconv命令實(shí)現(xiàn),這是針對文件的,即將指定文件從一種編碼轉(zhuǎn)換為另一種編碼。
iconv命令用法如下:

iconv [選項(xiàng)...] [文件...]
  • 1.輸入/輸出格式規(guī)范:
      -f, --from-code=名稱 原始文本編碼
      -t, --to-code=名稱 輸出編碼

  • 2.列舉所有已知的字符集  -l, --list

  • 3.輸出控制:
      -c   從輸出中忽略無效的字符
      -o, --output=FILE   輸出文件
      -s, --silent   關(guān)閉警告
      --verbose   打印進(jìn)度信息

例子:

iconv -f utf-8 -t gb2312 e_book.c> e_book1.c mv e_book1.c e_book.c

修改字符編碼后查看

file e_book.c

如圖:

此時(shí)再次顯示就正確了。


本文章僅供學(xué)習(xí)交流用禁止用作商業(yè)用途,文中內(nèi)容來水枂編輯,如需轉(zhuǎn)載請告知,謝謝合作

微信公眾號:zhjj0729

微博:文藝to青年

總結(jié)

以上是生活随笔為你收集整理的关于gedit的编码问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。