2017-06-05 112 views
0

我目前正在研究韓語程序,該程序應該被翻譯成中文。我發現奇怪的是,該應用程序混合了UTF-8和UTF-16字符。將UTF-8與UTF-16混合使用

比方說,我們已經一個字符串,它竟把:

"게임을 정말로 종료하시겠습니까" 
8C AC 84 C7 44 C7 20 00 15 C8 D0 B9 5C B8 20 00 
85 C8 CC B8 58 D5 DC C2 A0 AC B5 C2 C8 B2 4C AE 00 

但它存儲爲

B0 D4 C0 D3 C0 BB 20 C1 A4 B8 BB B7 CE 20 C1 BE 
B7 E1 C7 CF BD C3 B0 DA BD C0 B4 CF B1 EE 3F 00 

只是爲了防止零。我想知道,如果是某種加密,還是隻是編譯器使用的一種常規方法來防止字符串中間的字符串結束?因爲,最後的結果是我提到的第一個字符串。任何閱讀將不勝感激。

+0

參見http://utf8everywhere.org/ –

+2

它採用從前的多字節編碼,字節值是[代碼頁949](https://en.wikipedia.org/wiki/匹配Code_page_949)。 –

+0

@HansPassant您是否可以給我進一步的提示,將此編碼轉換爲正常的UTF-16字符串? – mexikanoZ

回答

1

一個字符串必須是uft-8或utf-16(或其他編碼)。如果將字符串中的編碼混合在一起,那就是錯誤。但是,通常將字符串傳遞爲utf-8,並且只有在Windows函數需要時纔將它們轉換爲utf-16。這有幾個原因,Basile Starynkevitch提供了一個鏈接。

如果你需要例程來閱讀UFT-8,我在這裏有一些。

https://github.com/MalcolmMcLean/babyx/blob/master/src/common/BBX_Font.c

+0

字符串是UTF-8,但UTF-16字符已被轉換爲UTF-8(無零)。這是我的問題實際開始的地方。舉例來說,我舉幾個例子:(54448)B0 D4 - >(44172)[遊戲] 8C AC | (54704)B0 D5 - >(44176)[겐] 90 AC | (54960)B0 D6 - >(44180)[겔] 94 AC。我不確定它是一種加密,還是隻是編碼。 – mexikanoZ

+0

@mexicanoZ不知道你爲什麼說UTF-8沒有零。 UTF 8將00編碼爲00.它不會消除零。它保留它們。 –

+2

UTF-8在字符串中沒有零字節。除了也是代碼點0的nul字節,並且在C族語言中,字符串結束。 –