1. 程式人生 > >UTF8-CPP 庫處理x64dbg外掛選單中文亂碼

UTF8-CPP 庫處理x64dbg外掛選單中文亂碼

在編寫x64dbg外掛的過程中,發現外掛選單中文亂碼的問題,後來明白是由於編碼的問題導致的,由於x64dbg好像是Qt開發的介面,使用的是utf-8編碼的,而我使用的vs2017開發的外掛,使用的是Unicode編碼。編碼不一樣導致中文亂碼。

先了解一下各種編碼ASCII、Unicode和UTF-8的關係:
簡單歸納:

編碼 大小 支援
ASCII 1個位元組 英文
Unicode 2個位元組(生僻字4個) 所有語言
UTF-8 1-6個位元組,英文字母1個位元組,漢字3個位元組,生僻字4-6個位元組 所有語言

VS中有字符集設定Unicode和多位元組字符集:對應著C++基本資料型別分別為:char、wchar_t。
char叫多位元組字元,一個char佔一個位元組,之所以叫多位元組字元是因為它表示一個字時可能是一個位元組也可能是多個位元組。一個英文字元(如’s’)用一個char(一個位元組)表示,一箇中文漢字(如’中’)用3個char(三個位元組)表示
wchar_t儲存Unicode的編碼,所有的字元都使用2個位元組儲存。

C++在處理unicode上一向是太弱,即使有w_char的選項,但是在跨平臺和相容性上面實在是欠佳。

所以VS開發我們使用的是Unicode編碼或者多位元組編碼,而x64dbg使用的是utf-8編碼,需要把字串轉換成utf-8編碼格式,所以我們需要採用第三方庫UTF-8-CPP庫進行轉換。
http://utfcpp.sourceforge.net/

用法:

#include "utf8.h"

wchar_t p[512];
std::wstring utf16line(p, len);
std::string utf8line;
utf8::utf16to8(utf16line.begin(
), utf16line.end(), std::back_inserter(utf8line));

提供一個其他轉換函式:

std::string string_To_UTF8(const std::string & str)
{
	int nwLen = ::MultiByteToWideChar(CP_ACP, 0, str.c_str(), -1, NULL, 0);

	wchar_t * pwBuf = new wchar_t[nwLen + 1];//一定要加1,不然會出現尾巴
	ZeroMemory(pwBuf, nwLen * 2 + 2);

	::MultiByteToWideChar
(CP_ACP, 0, str.c_str(), str.length(), pwBuf, nwLen); int nLen = ::WideCharToMultiByte(CP_UTF8, 0, pwBuf, -1, NULL, NULL, NULL, NULL); char * pBuf = new char[nLen + 1]; ZeroMemory(pBuf, nLen + 1); ::WideCharToMultiByte(CP_UTF8, 0, pwBuf, nwLen, pBuf, nLen, NULL, NULL); std::string retStr(pBuf); delete[]pwBuf; delete[]pBuf; pwBuf = NULL; pBuf = NULL; return retStr; }

相關推薦

UTF8-CPP 處理x64dbg外掛選單中文亂碼

在編寫x64dbg外掛的過程中,發現外掛選單中文亂碼的問題,後來明白是由於編碼的問題導致的,由於x64dbg好像是Qt開發的介面,使用的是utf-8編碼的,而我使用的vs2017開發的外掛,使用的是Unicode編碼。編碼不一樣導致中文亂碼。 先了解一下各種編碼

PHP用mb_string函式處理與windows相關中文字元

昨天想批處理以前下載的一堆檔案,把檔案裡的關鍵內容用正則匹配出來,集中處理。在操作檔案時遇到一個問題,就是windows作業系統中的編碼問題。 我們都知道windows中(當然是中文版),檔名和檔案內容等編碼都是gbk,而我們在開發過程中,IDE裡的編碼則是UTF-8,(這裡不討論為什麼等等問題, 只考慮

spring boot 頂層filter處理GBK文字後中文亂碼

import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.context.annotation.Bean; import org.springframework.c

編寫filter,處理get和post中文亂碼問題

寫web程式遇到中文亂碼是無法避免的問題,雖然有好多框架都都做了處理,但是還是對於剛剛學習jsp和servlet的新手來說,亂碼還是不好處理,所以幾天貼出福利程式碼包裝一下Httprequest處理get亂碼問題,post亂碼只需要修改字元編碼就好了 所以只需

ubuntu12.04 和win7作業系統上Qt處理mysql中的中文亂碼問題

(1) mysql資料庫中需要以utf8格式儲存。(2) main函式設定 QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));(3) Qt介面顯示時:       std::string sz

oreacle資料庫為utf8,但是plsql還是插入資料中文亂碼問題

安裝了oracle,使用了PLSQL,安裝好了試用了一下,再插入中文的sql值時出現了亂碼。 中文亂碼就是編碼不統一所導致的了,解決辦法只需要把編碼統一下即可解決了。 此種情況最大的可能就是客戶端和伺服器端的編碼不一致,解決方法如下: 1. 檢視伺服器端編碼 select

cmd黑窗口查詢數據中數據時中文亂碼

正常 gb2312 中文亂碼 系統 res set 字符集 數據庫 mage 1.打開cmd窗口,輸入show variables like ‘character_set_%‘; 2.因為操作系統是中文操作系統,默認使用的字符集是GB2312,所以需要把輸出窗口使用的

PL SQL 12.0.7的安裝及註冊碼,漢化包,連接Oracle遠程數據中文亂碼問題處理

目錄結構 百度雲盤 des 遠程 .html nload key 選擇 計算機 首先,在官網下載PL SQL 的對應版本,本機是64位的就下載64位的,網址:https://www.allroundautomations.com/downloads.html#PLS 點擊應

日誌中文亂碼處理,請求亂碼,響應亂碼,保存數據到數據亂碼

conf 服務器 過濾器 close 發布服務 setting open odi idea 1.日誌亂碼處理 中文亂碼需要修改四個部分:1.idea安裝目錄下的bin/idea64.exe.vmoptions和bin/idea.exe.vmoptions追加-Dfile.e

小專案(Gensim)--維基百科中文資料處理

1.下載維基百科資料 https://dumps.wikimedia.org/zhwiki/latest/ 2.預處理檔案:將壓縮的檔案轉化成.txt檔案 新增指令碼檔案process.py,程式碼如下: import logging import os.path import sys

C++讀寫檔案,處理UTF8檔案,處理GBK中文字元

讀檔案 //從檔案中提取詞典 void getLexiconFromTrainData(char* filepath){ maxLength = 0; lexicalItemCount=0; allSentenceCount=0; wordCount=0

ubuntu MySQL數據輸入中文亂碼 解決方案

title str itl alt 查詢 ref cte class nbsp 一、登錄MySQL查看用SHOW VARIABLES LIKE ‘character%’;下字符集,顯示如下:+--------------------------+--------------

C#對URL中的中文亂碼處理

res quest 類庫 處理 odin .dll 前言 中文亂碼 ring 前言:UTF-8中,一個漢字對應三個字節,GB2312中一個漢字占用兩個字節。 不論何種編碼,字母數字都不編碼,特殊符號編碼後占用一個字節。 1、直接在C#後臺編碼URL參數 引用類庫:Syste

處理Servlet響應中文亂碼

ase tchar ans servle write toc value source padding 首先,response返回有兩種,一種是字節流outputstream,一種是字符流printwrite。 申明:這裏為了方便起見,所有輸出都統一用UTF-8編碼。 先說

MySQL數據中文亂碼問題

pid page sets 防範 網站 filesyste linux x86_64 5-0 mysql> select * from books; +-----+---------------------------------+---------+------

輸出中文亂碼處理

text ons strong ace spa space 處理 字符流 response * 字節流: * 設置瀏覽器默認打開的編碼: * resposne.setHeader(“Content-Type”,”text/html;charset

php 保存到mysql數據中的中文亂碼

sql mysql數據庫 sca escape huang tlb eba ont chan Java%E7%A8%8B%E5%BA%8F%E5%91%98%E7%9A%84%E6%97%A5%E5%B8%B8%E2%80%94%E2%80%94%20%E3%80%8A%E

Datastage JDBC Connector 中文亂碼處理

default 中文亂碼 在Datastage中,通常處理中文字符編碼的時候是通過設置工程、JOB、stage三個級別的NLS但JDBC Connector stage這個組件並沒有NLS選項,而是通過 stage裏面的“Properties”選項卡裏面的“Session”-->“Charact

Powerdesigner數據反向生成PDM顯示中文

powerdesignerTools->Execute Commands->Edit/Runscript…執行以下腳本,在Powerdesigner從數據庫反向生成PDM時,NAME顯示中文。 Option ExplicitValidationMode = TrueInteractiveMode

SpringMVC如何解決POST請求中文亂碼問題,GET的又如何處理呢?

rec ppi utf-8 proto style app 亂碼問題 ping 解決 在web.xml中 <filter> <filter-name>CharacterEncodingFilter</filter-name>