我工作的一個Web應用程序的遺留代碼,我現在把一些代碼來UNICODE的ASCII部分。我遇到了記錄器中的以下錯誤。似乎字符串文字不是創建的,就是因爲某種原因而被破壞。
以下字符串示例 - "%s::%s - Started with success."
在內存中,它看起來像這樣。
2AF9BFC 25 00 73 00 3A 00 3A 00 %.s.:.:.
02AF9C04 25 00 73 00 20 00 2D 00 %.s. .-.
02AF9C0C 20 00 53 00 74 00 61 00 .S.t.a.
02AF9C14 72 00 74 00 65 00 64 00 r.t.e.d.
02AF9C1C 20 00 77 00 69 00 74 00 .w.i.t.
02AF9C24 68 00 20 00 73 00 75 00 h. .s.u.
02AF9C2C 63 00 63 00 65 00 73 00 c.c.e.s.
02AF9C34 73 00 2E 00 00 00 00 00 s.......
02AF9C3C 00 00 00 00 00 00 00 00 ........
在日誌中的字符串看起來如下-_S_t_a_r_t_e_d_ _w_i_t_h _s_u_c_c_e_s_s 如果空間在這裏表示像往常一樣和NULL字符是_(_的僅僅是一個例子來表示,不同的TXT編輯器將顯示它以不同的方式)。
我確實使用了_T宏,它將字符串替換爲我學習的Unicode。
爲什麼我會得到字節0前綴?
你確定它不是字符串'L「%s ::%s - 開始成功。 (仔細看文檔) –
這完全正常,這就是用utf-16編碼的字符串。拋出一些中文字符來看看別的不是0的東西。你可以通過添加一個BOM來將任何程序用於更聰明地查看文本,並將0xfeff寫入文件的開頭。 –
@ R.MartinhoFernandes就像我剛纔提到的那樣,字符串的前綴是_T宏,它確實被替換爲L – qballer