|
|||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object | +--com.ibm.icu4jni.text.Normalizer
normalize
transforms Unicode text into an equivalent composed or
decomposed form, allowing for easier sorting and searching of text.
normalize
supports the standard normalization forms described in
Unicode Standard Annex #15 — Unicode Normalization Forms.
Characters with accents or other adornments can be encoded in
several different ways in Unicode. For example, take the character A-acute.
In Unicode, this can be encoded as a single character (the
"composed" form):
00C1 LATIN CAPITAL LETTER A WITH ACUTEor as two separate characters (the "decomposed" form):
0041 LATIN CAPITAL LETTER A 0301 COMBINING ACUTE ACCENTTo a user of your program, however, both of these sequences should be treated as the same "user-level" character "A with acute accent". When you are searching or comparing text, you must ensure that these two sequences are treated equivalently. In addition, you must handle characters with more than one accent. Sometimes the order of a character's combining accents is significant, while in other cases accent sequences in different orders are really equivalent. Similarly, the string "ffi" can be encoded as three separate letters:
0066 LATIN SMALL LETTER F 0066 LATIN SMALL LETTER F 0069 LATIN SMALL LETTER Ior as the single character
FB03 LATIN SMALL LIGATURE FFIThe ffi ligature is not a distinct semantic character, and strictly speaking it shouldn't be in Unicode at all, but it was included for compatibility with existing character sets that already provided it. The Unicode standard identifies such characters by giving them "compatibility" decompositions into the corresponding semantic characters. When sorting and searching, you will often want to use these mappings.
normalize
helps solve these problems by transforming text into the
canonical composed and decomposed forms as shown in the first example above.
In addition, you can have it perform compatibility decompositions so that
you can treat compatibility characters the same as their equivalents.
Finally, normalize
rearranges accents into the proper canonical
order, so that you do not have to worry about accent rearrangement on your
own.
Form FCD, "Fast C or D", is also designed for collation.
It allows to work on strings that are not necessarily normalized
with an algorithm (like in collation) that works under "canonical closure", i.e., it treats precomposed
characters and their decomposed equivalents the same.
It is not a normalization form because it does not provide for uniqueness of representation. Multiple strings
may be canonically equivalent (their NFDs are identical) and may all conform to FCD without being identical
themselves.
The form is defined such that the "raw decomposition", the recursive canonical decomposition of each character,
results in a string that is canonically ordered. This means that precomposed characters are allowed for as long
as their decompositions do not need canonical reordering.
Its advantage for a process like collation is that all NFD and most NFC texts - and many unnormalized texts -
already conform to FCD and do not need to be normalized (NFD) for such a process. The FCD quick check will
return UNORM_YES for most strings in practice.
normalize(UNORM_FCD) may be implemented with UNORM_NFD.
For more details on FCD see the collation design document:
http://oss.software.ibm.com/cvs/icu/~checkout~/icuhtml/design/collation/ICU_collation_design.htm
ICU collation performs either NFD or FCD normalization automatically if normalization
is turned on for the collator object.
Beyond collation and string search, normalized strings may be useful for string equivalence comparisons,
transliteration/transcription, unique representations, etc.
The W3C generally recommends to exchange texts in NFC.
Note also that most legacy character encodings use only precomposed forms and often do not
encode any combining marks by themselves. For conversion to such character encodings the
Unicode text needs to be normalized to NFC.
For more usage examples, see the Unicode Standard Annex.
Field Summary | |
static int |
UNORM_DEFAULT
Default normalization @stable ICU 2.4 |
static int |
UNORM_FCD
"Fast C or D" form |
static int |
UNORM_MAYBE
Indicates that string cannot be determined if it is in the normalized format without further thorough checks @stable ICU 2.4 |
static int |
UNORM_NFC
Canonical decomposition followed by canonical composition @stable ICU 2.4 |
static int |
UNORM_NFD
Canonical decomposition @stable ICU 2.4 |
static int |
UNORM_NFKC
Compatibility decomposition followed by canonical composition @stable ICU 2.4 |
static int |
UNORM_NFKD
Compatibility decomposition @stable ICU 2.4 |
static int |
UNORM_NO
Indicates that string is not in the normalized format @stable ICU 2.4 |
static int |
UNORM_NONE
No decomposition/composition @stable ICU 2.4 |
static int |
UNORM_YES
Indicates that string is in the normalized format @stable ICU 2.4 |
Constructor Summary | |
Normalizer()
|
Method Summary | |
static boolean |
check(int normalization)
Checks if argument is a valid normalization format for use |
static int |
compose(char[] source,
char[] target,
boolean compat)
Compose a string. |
static java.lang.String |
compose(java.lang.String str,
boolean compat)
Compose a string. |
static int |
decompose(char[] source,
char[] target,
boolean compat)
Decompose a string. |
static java.lang.String |
decompose(java.lang.String str,
boolean compat)
Decompose a string. |
static int |
normalize(char[] source,
char[] target,
int normalizationMode)
Normalize a string. |
static java.lang.String |
normalize(java.lang.String str,
int normalizationMode)
Normalize a string. |
static int |
quickCheck(char[] source,
int mode)
Performing quick check on a string, to quickly determine if the string is in a particular normalization format. |
static int |
quickCheck(java.lang.String source,
int mode)
Conveinience method. |
Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Field Detail |
public static final int UNORM_NONE
public static final int UNORM_NFD
public static final int UNORM_NFKD
public static final int UNORM_NFC
public static final int UNORM_DEFAULT
public static final int UNORM_NFKC
public static final int UNORM_FCD
public static final int UNORM_NO
public static final int UNORM_YES
public static final int UNORM_MAYBE
Constructor Detail |
public Normalizer()
Method Detail |
public static java.lang.String compose(java.lang.String str, boolean compat) throws java.lang.Exception
compat
- If true the char array will be composed accoding to NFKC rules
and if false will be composed according to NFC rules.
java.lang.Exception
public static int compose(char[] source, char[] target, boolean compat) throws java.lang.Exception
source
- The char array to compose.compat
- If true the char array will be composed accoding to NFKC rules
and if false will be composed according to NFC rules.
java.lang.Exception
public static java.lang.String decompose(java.lang.String str, boolean compat) throws java.lang.Exception
compat
- If true the char array will be decomposed accoding to NFKD rules
and if false will be decomposed according to NFD rules.
java.lang.Exception
public static int decompose(char[] source, char[] target, boolean compat) throws java.lang.Exception
source
- The char array to decompose.compat
- If true the char array will be decomposed accoding to NFKD rules
and if false will be decomposed according to NFD rules.
java.lang.Exception
public static java.lang.String normalize(java.lang.String str, int normalizationMode) throws java.lang.Exception
java.lang.Exception
public static int normalize(char[] source, char[] target, int normalizationMode) throws java.lang.Exception
source
- The char array to normalize.
java.lang.Exception
public static int quickCheck(java.lang.String source, int mode) throws java.lang.Exception
source
- string for determining if it is in a normalized formatmode
- normalization format (Normalizer.UNORM_NFC,Normalizer.UNORM_NFD,
Normalizer.UNORM_NFKC,Normalizer.UNORM_NFKD)
java.lang.Exception
public static int quickCheck(char[] source, int mode)
source
- string for determining if it is in a normalized formatmode
- normalization format (Normalizer.UNORM_NFC,Normalizer.UNORM_NFD,
Normalizer.UNORM_NFKC,Normalizer.UNORM_NFKD)
public static boolean check(int normalization)
normalization
- format
|
|||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |