我發現ICU文檔有點具有挑戰性。如何使用ICU4C對字符串進行標準化?
我的問題是:如何使用ICU4C規範化字符串?
我在看unorm2_normalize,但是如果緩衝區不夠大?我以前怎麼知道這一點?當然,我想規範整個字符串。
謝謝! :>
P.S.以下是該函數的API文檔:http://icu-project.org/apiref/icu4c/unorm2_8h.html#a0a596802db767da410b4b04cb75cbc53
我發現ICU文檔有點具有挑戰性。如何使用ICU4C對字符串進行標準化?
我的問題是:如何使用ICU4C規範化字符串?
我在看unorm2_normalize,但是如果緩衝區不夠大?我以前怎麼知道這一點?當然,我想規範整個字符串。
謝謝! :>
P.S.以下是該函數的API文檔:http://icu-project.org/apiref/icu4c/unorm2_8h.html#a0a596802db767da410b4b04cb75cbc53
您從pErrorCode參數中的所有這些函數調用中獲得錯誤代碼。這是你如何把這樣一個功能:
UErrorCode error = U_ZERO_ERROR;
unorm2_normalize(... &error);
....
if(!U_SUCCESS(error))
{
// handle error...
}
下面是錯誤代碼:http://icu-project.org/apiref/icu4c/utypes_8h.html#a3343c1c8a8377277046774691c98d78c
你的情況,你可能想要做這樣的事情:
if(error == U_STRING_NOT_TERMINATED_WARNING
|| error == U_BUFFER_OVERFLOW_ERROR)
{
// enlarge the buffer...
}
Hallo und guten標籤! :)謝謝你的回答。嘗試正常化某些東西似乎浪費時間,而當它不起作用時,從頭開始重新開始。規範器實例是否跟蹤它的位置?我該如何處置標準器實例? –
我不知道這是否可能,我還沒有用過這個庫。我會建議採用以下方法之一:1.如果你希望你的輸入字符串已經被標準化,並且只想確保:用最終目的地作爲緩衝區調用它,並且如果它太小,再用更大的臨時緩衝區調用它。 2.如果你期望字符串通常需要標準化:用一個大得多的臨時緩衝區調用它,你也可以用它來做其他事情,並且當你知道函數調用後的最終大小並在那裏複製時分配最終目的地。 – x4u
如果你不對ICU感到舒服,看看[libunistring](http://www.gnu.org/software/libunistring/manual/libunistring.html)這可能更適合... – Christoph
我看了一下libunistring,但似乎它自2010年以來沒有更新過。我將使用Unicode 6的許多功能。儘管如此,謝謝:) –