我試圖將Unicode代碼點轉換爲百分比編碼的UTF-8代碼單元。Utf-8到URI百分比編碼
Unicode-> UTF-8轉換似乎正常工作,正如一些測試顯示的印地語和中文字符在使用UTF-8編碼的Notepad ++中正確顯示,並且可以正確轉換回來。
我認爲編碼的百分比就像在每個UTF-8代碼單元前面添加'%'一樣簡單,但這不起作用。而不是預期的%E5%84%A3,我看到%xE5%x84%xA3(對於unicode U + 5123)。
我在做什麼錯?
增加的代碼(注意utf8.h屬於UTF8-CPP庫)。
#include <fstream>
#include <iostream>
#include <vector>
#include "utf8.h"
std::string unicode_to_utf8_units(int32_t unicode)
{
unsigned char u[5] = {0,0,0,0,0};
unsigned char *iter = u, *limit = utf8::append(unicode, u);
std::string s;
for (; iter != limit; ++iter) {
s.push_back(*iter);
}
return s;
}
int main()
{
std::ofstream ofs("test.txt", std::ios_base::out);
if (!ofs.good()) {
std::cout << "ofstream encountered a problem." << std::endl;
return 1;
}
utf8::uint32_t unicode = 0x5123;
auto s = unicode_to_utf8_units(unicode);
for (auto &c : s) {
ofs << "%" << c;
}
ofs.close();
return 0;
}
你真的使用字符0-9和A-F來編碼代碼單元嗎?在任何隨機代碼單元之前,只需添加一個百分號即可避免百分比轉義。 – rightfold
不清楚爲什麼你的代碼生成「x」。我們看不到它。 –
@ not-rightfold我正在使用utf8cpp庫進行unicode - > utf8轉換,並且據我所知,它工作正常。 –