2011-05-10 96 views
4

在C++中是否有一種跨平臺的方式將UTF-8轉換爲拉丁/阿拉伯語以及拉丁/阿拉伯語轉換爲UTF-8?如何將表單UTF-8轉換爲拉丁/阿拉伯語,反之亦然?

+5

ANSI/Windows-1252無法表示UTF-8可以顯示的所有字符。所以不,你不能可靠地轉換,除非你定義了一些擴展1252. – Erik 2011-05-10 12:32:14

+1

@Erik的轉義機制:更糟糕的是,在這個上下文中的「ANSI」是一個黃鼠狼的詞,表示「此刻設置的任何編碼」 - 它甚至不是保證是Windows-1252。 – Piskvor 2011-05-10 12:35:18

+0

我關心一組特定的字符(http://en.wikipedia.org/wiki/ISO/IEC_8859-6) – Abdelwahed 2011-05-10 12:35:22

回答

3

有像庫存icu可用。但Erik當然是對的:從Unicode到ISO 8859-6的往返行程將是有損的。 (是的,UTF-8是「Unicode」,UTF-16也是「Unicode」,只是在相同的代碼中有不同的位模式,如果你不知道的話,見Joel Spolsky's text。 )

+0

是否有任何代碼示例 – Abdelwahed 2011-05-10 12:53:24

+1

icu包含示例,例如http://source.icu-project.org/repos/icu/icuapps/trunk/translitdemo/ – 2011-05-12 08:14:00

0

沒有,但有一個跨平臺的方式來轉換在wchar_t代表的unicode(它是Windows上的16位和大多數其他平臺上的32位)以及在標準C庫中使用來自標準C庫的wcstombs/mbstowcs例程或localecodecvt方法在系統中設置爲區域設置字符編碼的任何內容。 wchar_t之間的轉換,其中每個元素是一個代碼點和utf-8是非常簡單的。因此,您可以在某個例程中寫入或複製,以在wchar_t中的utf-8和unicode之間進行轉換,並將其與wcstombs/mbstowcs合併。