我有一個沒有BOM編碼的UTF-8編碼的xml文件。在十六進制編輯器它給:3c 3f 78 6d
將沒有BOM xml文件的UTF-8轉換爲ISO 8859-1
我緩存我的XML文件,並在開始處添加BOM:
char* BufferEncoder = (char*)malloc(3);
memset(BufferEncoder, 0, size);
for(int i=0;i<3;i++) BufferEncoder[i] ^= 0xaa;
BufferEncoder[0]=(char)0xef;
BufferEncoder[1]=(char)0xbb;
BufferEncoder[2]=(char)0xbf;
// concatenate into a new Buffer containing old xml and the BOM
我試圖再從UTF-8 BOM轉換爲ISO 8859-1使用這些代碼行數:
int size = WideCharToMultiByte(28591 /*ISO-8859-1*/, 0, pBuffer, -1, NULL, 0, NULL, 0);
if (size>0)
{
char* pBuffer2 = (char*)malloc(size);
memset(pBuffer2, 0, sizeNew);
WideCharToMultiByte(28591, 0,pBuffer,-1, pBuffer2, size, NULL, 0);
// .........
此代碼尚未測試。你認爲這是最好的解決方案嗎?任何想法或建議是受歡迎的。先謝謝你。
我討厭問這個問題,因爲答案是非常糟糕的:爲什麼你覺得你必須從UTF-8轉換文本?另外,如果WideCharToMultiByte做我認爲它所做的事情;你正在使用錯誤的功能。 UTF-8不是寬字符編碼;和ISO-8859-1不是多字節。 –
謝謝你的回答。我的xml文件是由另一個工具(TLC Simulink)生成的,我無法控制它。如果沒有包含特殊字符的BOM,IXMLDocument的加載函數無法加載xml UTF-8 ..因此,我必須將它轉換爲帶有BOM的UTF-8,然後轉換爲ISO 8859-1,否則它將無法工作。什麼是正確的功能呢? :)4 – Jawhar
如果是這樣的話; IXMLDocument被無法挽回地破壞。使用不同的XML處理工具。如果你沒有明確這一點,在沒有XML聲明的情況下處理XML文檔的正確方法是聲明編碼,並且不會產生其他提示,說明編碼可能是將其視爲沒有BOM的UTF-8。任何不同的工具都是做錯了,需要避免和羞辱;如果時間和敏感性允許的話,也許會被劃分和劃分。 –