我有一個UTF-16字符串,它包含了一些字符在我的本地Windows-1252
代碼頁不是直接表示的:如何獲得最佳的編碼之間配合的Unicode字符映射
6/23/2011 9:23:44 ᴀᴍ
我使用WideCharToMultiByte
的字符串轉換爲本地代碼頁(Windows的1252我的北美電腦上):
WideCharToMultiByte(
CP_ACP, //target CodePage
0, //flags
Source, //my string, e.g. "6/23/2011 9:23:44 ᴀᴍ"
length, //length in characters, e.g. 20
buffer, //destination where to put the string
bufferSize,
null, //optional, character to use when character cannot be represented
null); //optional, out boolean that indicates if any character could not be represented
和字符串出來爲:
6/23/2011 9:23:44 ??
字面上帶有問號0x3f = "?"
表示不可表示的字符。
當你看到在原來的字符串 「ᴀᴍ」 字符,這兩個人物是:
ᴀ
U + 1D00:拉丁文字母小型大寫Aᴍ
U + 1D0D:拉丁字母小Capital M
unicode標準說these are phonetic extensions, and for general text: use regular Latin。這對我來說意味着文本應轉換爲兩種:
6/23/2011 9:23:44 AM
或
6/23/2011 9:23:44 am
另一個例子是6′2″
:
′
U + 2032:總理″
U + 2033:Double Prime
當我將該字符串轉換爲Windows-1252
它變成6'2?
(撇號,?
)。
Unicode entry for Prime列表撇號作爲替代:
2032 ′ PRIME
= minutes, feet
→ 0027 ' apostrophe
→ 00B4 ´ acute accent
→ 02B9 ʹ modifier letter prime
即使素不會在目標代碼頁存在,WideChartoMultiByte
是將其轉換爲最接近的等同物中的一個(即撇號)。
在另一方面兩撇:
2033 ″ DOUBLE PRIME
= seconds, inches
→ 0022 " quotation mark
→ 02BA ʺ modifier letter double prime
→ 201D 」 right double quotation mark
≈ 2032 ′ 2032 ′
被映射到什麼(?
),但在我的Windows-1252編碼的一些其他項目的存在:
Character Unicode Windows-1252
========================================= ======= ============
″ double prime U+2032 -
" quotation mark U+0022 0x22
ʺ modifier letter double prime U+02BA -
」 right double quotation mark U+201D 0x94
′ prime U+2032 -
' apostrophe U+0027 0x27
´ acute accent U+00B4 0xb4
ʹ modifier letter prime U+02B9
即使在最壞的情況下,它分解原來的double prime
到prime
prime
:素有一個等價物 - 因爲它alre ady使用它。
對於其他角色也有映射:
Character Unicode Windows-1252
========================================= ======= ============
ᴀ Latin Letter Small Capital A U+1D00 -
A Latin Capital Letter A U+0041 0x41
a Latin Small Letter A U+0061 0x61
ᴍ Latin Letter Small Capital M U+1D0D -
M Latin Capital Letter M U+004D 0x4d
m Latin Small Letter M U+006D 0x6d
如何使WideChartoMultiByte
做編碼之間的最佳匹配映射?
一個非常精通的問題! –