diff --git a/.gitattributes b/.gitattributes index af9c124045..9931d13ee2 100644 --- a/.gitattributes +++ b/.gitattributes @@ -60,6 +60,7 @@ icu4c/source/data/in/ubidi.icu -text icu4c/source/data/in/ucase.icu -text icu4c/source/data/in/unames.icu -text icu4c/source/data/in/uprops.icu -text +icu4c/source/data/in/uts46.nrm -text icu4c/source/data/lang/pool.res -text icu4c/source/data/locales/pool.res -text icu4c/source/data/region/pool.res -text diff --git a/icu4c/source/common/Makefile.in b/icu4c/source/common/Makefile.in index ba712ee04a..dbe30ed5ae 100644 --- a/icu4c/source/common/Makefile.in +++ b/icu4c/source/common/Makefile.in @@ -91,7 +91,7 @@ utrie.o utrie2.o utrie2_builder.o bmpset.o unisetspan.o uset_props.o uniset_prop uarrsort.o brkiter.o ubrk.o brkeng.o dictbe.o triedict.o \ rbbi.o rbbidata.o rbbinode.o rbbirb.o rbbiscan.o rbbisetb.o rbbistbl.o rbbitblb.o \ serv.o servnotf.o servls.o servlk.o servlkf.o servrbf.o servslkf.o \ -uidna.o usprep.o punycode.o \ +uidna.o usprep.o uts46.o punycode.o \ util.o util_props.o parsepos.o locbased.o cwchar.o wintz.o mutex.o dtintrv.o ucnvsel.o propsvec.o \ ulist.o uloc_tag.o icudataver.o icuplug.o diff --git a/icu4c/source/common/common.vcproj b/icu4c/source/common/common.vcproj index 98fd5d88c6..81d016f48a 100644 --- a/icu4c/source/common/common.vcproj +++ b/icu4c/source/common/common.vcproj @@ -2691,6 +2691,46 @@ Name="idna" Filter="*.c,*.h" > + + + + + + + + + + + + + + @@ -2743,6 +2783,10 @@ /> + + + *
  • With nontransitional processing, such characters are + * copied to the destination string. + *
  • With transitional processing, such characters are + * mapped (sharp s/sigma) or removed (joiner/nonjoiner). + * + * @return TRUE if transitional and nontransitional processing produce different results + * @draft ICU 4.6 + */ + UBool isTransitionalDifferent() const { return isTransDiff; } + +private: + friend class UTS46; + + IDNAInfo(const IDNAInfo &other); // no copying + IDNAInfo &operator=(const IDNAInfo &other); // no copying + + void reset() { + errors=labelErrors=0; + isTransDiff=FALSE; + isBiDi=FALSE; + isOkBiDi=TRUE; + } + + uint32_t errors, labelErrors; + UBool isTransDiff; + UBool isBiDi; + UBool isOkBiDi; +}; + +U_NAMESPACE_END + +#endif // UCONFIG_NO_IDNA +#endif // __IDNA_H__ diff --git a/icu4c/source/common/unicode/uidna.h b/icu4c/source/common/unicode/uidna.h index 01c8c85d95..8be336d830 100644 --- a/icu4c/source/common/unicode/uidna.h +++ b/icu4c/source/common/unicode/uidna.h @@ -21,64 +21,488 @@ #if !UCONFIG_NO_IDNA +#include "unicode/localpointer.h" #include "unicode/parseerr.h" - + /** * \file - * \brief C API: Internationalized Domain Names in Applications Tranformation + * \brief C API: Internationalizing Domain Names in Applications (IDNA) * - * UIDNA API implements the IDNA protocol as defined in the IDNA RFC + * IDNA2008 is implemented according to UTS #46, see the IDNA C++ class in idna.h. + * + * The C API functions which do take a UIDNA * service object pointer + * implement UTS #46 and IDNA2008. + * The C API functions which do not take a service object pointer + * implement IDNA2003. + */ + +/* + * IDNA option bit set values. + */ +enum { + /** + * Default options value: None of the other options are set. + * @stable ICU 2.6 + */ + UIDNA_DEFAULT=0, + /** + * Option to allow unassigned code points in domain names and labels. + * This option is ignored by the UTS46 implementation. + * (UTS #46 disallows unassigned code points.) + * @stable ICU 2.6 + */ + UIDNA_ALLOW_UNASSIGNED=1, + /** + * Option to check whether the input conforms to the STD3 ASCII rules, + * for example the restriction of labels to LDH characters + * (ASCII Letters, Digits and Hyphen-Minus). + * @stable ICU 2.6 + */ + UIDNA_USE_STD3_RULES=2, + /** + * IDNA option to check for whether the input conforms to the BiDi rules. + * This option is ignored by the IDNA2003 implementation. + * (IDNA2003 always performs a BiDi check.) + * @draft ICU 4.6 + */ + UIDNA_CHECK_BIDI=4, + /** + * IDNA option to check for whether the input conforms to the CONTEXTJ rules. + * This option is ignored by the IDNA2003 implementation. + * (The CONTEXTJ check is new in IDNA2008.) + * @draft ICU 4.6 + */ + UIDNA_CHECK_CONTEXTJ=8, + /** + * IDNA option for nontransitional processing in ToASCII(). + * By default, ToASCII() uses transitional processing. + * This option is ignored by the IDNA2003 implementation. + * (This is only relevant for compatibility of newer IDNA implementations with IDNA2003.) + * @draft ICU 4.6 + */ + UIDNA_NONTRANSITIONAL_TO_ASCII=0x10, + /** + * IDNA option for nontransitional processing in ToUnicode(). + * By default, ToUnicode() uses transitional processing. + * This option is ignored by the IDNA2003 implementation. + * (This is only relevant for compatibility of newer IDNA implementations with IDNA2003.) + * @draft ICU 4.6 + */ + UIDNA_NONTRANSITIONAL_TO_UNICODE=0x20 +}; + +/** + * Opaque C service object type for the new IDNA API. + * @draft ICU 4.6 + */ +struct UIDNA; +typedef struct UIDNA UIDNA; /**< C typedef for struct UIDNA. @draft ICU 4.6 */ + +/** + * Returns a UIDNA instance which implements UTS #46. + * Returns an unmodifiable instance, owned by the caller. + * Cache it for multiple operations, and uidna_close() it when done. + * + * For details about the UTS #46 implementation see the IDNA C++ class in idna.h. + * + * @param options Bit set to modify the processing and error checking. + * See option bit set values in uidna.h. + * @param pErrorCode Standard ICU error code. Its input value must + * pass the U_SUCCESS() test, or else the function returns + * immediately. Check for U_FAILURE() on output or use with + * function chaining. (See User Guide for details.) + * @return the UTS #46 UIDNA instance, if successful + * @draft ICU 4.6 + */ +U_DRAFT UIDNA * U_EXPORT2 +uidna_openUTS46(uint32_t options, UErrorCode *pErrorCode); + +/** + * Closes a UIDNA instance. + * @param idna UIDNA instance to be closed + * @draft ICU 4.6 + */ +U_DRAFT void U_EXPORT2 +uidna_close(UIDNA *idna); + +#if U_SHOW_CPLUSPLUS_API + +U_NAMESPACE_BEGIN + +/** + * \class LocalUIDNAPointer + * "Smart pointer" class, closes a UIDNA via uidna_close(). + * For most methods see the LocalPointerBase base class. + * + * @see LocalPointerBase + * @see LocalPointer + * @draft ICU 4.6 + */ +U_DEFINE_LOCAL_OPEN_POINTER(LocalUIDNAPointer, UIDNA, uidna_close); + +U_NAMESPACE_END + +#endif + +/** + * Output container for IDNA processing errors. + * Initialize with UIDNA_INFO_INITIALIZER: + * \code + * UIDNAInfo info = UIDNA_INFO_INITIALIZER; + * int32_t length = uidna_nameToASCII(..., &info, &errorCode); + * if(U_SUCCESS(errorCode) && info.errors!=0) { ... } + * \endcode + * @draft ICU 4.6 + */ +struct UIDNAInfo { + /** sizeof(UIDNAInfo) @draft ICU 4.6 */ + int16_t size; + /** + * Set to TRUE if transitional and nontransitional processing produce different results. + * For details see C++ IDNAInfo::isTransitionalDifferent(). + * @draft ICU 4.6 + */ + UBool isTransitionalDifferent; + UBool reservedB3; /**< Reserved field, do not use. @internal */ + /** + * Bit set indicating IDNA processing errors. 0 if no errors. + * See UIDNA_ERROR_... constants. + * @draft ICU 4.6 + */ + uint32_t errors; + int32_t reservedI2; /**< Reserved field, do not use. @internal */ + int32_t reservedI3; /**< Reserved field, do not use. @internal */ +}; +typedef struct UIDNAInfo UIDNAInfo; + +/** + * Static initializer for a UIDNAInfo struct. + * @draft ICU 4.6 + */ +#define UIDNA_INFO_INITIALIZER { \ + (int16_t)sizeof(UIDNAInfo), \ + FALSE, FALSE, \ + 0, 0, 0 } + +/** + * Converts a single domain name label into its ASCII form for DNS lookup. + * If any processing step fails, then pInfo->errors will be non-zero and + * the result might not be an ASCII string. + * The label might be modified according to the types of errors. + * Labels with severe errors will be left in (or turned into) their Unicode form. + * + * The UErrorCode indicates an error only in exceptional cases, + * such as a U_MEMORY_ALLOCATION_ERROR. + * + * @param idna UIDNA instance + * @param label Input domain name label + * @param length Label length, or -1 if NUL-terminated + * @param dest Destination string buffer + * @param capacity Destination buffer capacity + * @param pInfo Output container of IDNA processing details. + * @param pErrorCode Standard ICU error code. Its input value must + * pass the U_SUCCESS() test, or else the function returns + * immediately. Check for U_FAILURE() on output or use with + * function chaining. (See User Guide for details.) + * @return destination string length + * @draft ICU 4.6 + */ +U_DRAFT int32_t U_EXPORT2 +uidna_labelToASCII(const UIDNA *idna, + const UChar *label, int32_t length, + UChar *dest, int32_t capacity, + UIDNAInfo *pInfo, UErrorCode *pErrorCode); + +/** + * Converts a single domain name label into its Unicode form for human-readable display. + * If any processing step fails, then pInfo->errors will be non-zero. + * The domain name might be modified according to the types of errors. + * + * The UErrorCode indicates an error only in exceptional cases, + * such as a U_MEMORY_ALLOCATION_ERROR. + * + * @param idna UIDNA instance + * @param label Input domain name label + * @param length Label length, or -1 if NUL-terminated + * @param dest Destination string buffer + * @param capacity Destination buffer capacity + * @param pInfo Output container of IDNA processing details. + * @param pErrorCode Standard ICU error code. Its input value must + * pass the U_SUCCESS() test, or else the function returns + * immediately. Check for U_FAILURE() on output or use with + * function chaining. (See User Guide for details.) + * @return destination string length + * @draft ICU 4.6 + */ +U_DRAFT int32_t U_EXPORT2 +uidna_labelToUnicode(const UIDNA *idna, + const UChar *label, int32_t length, + UChar *dest, int32_t capacity, + UIDNAInfo *pInfo, UErrorCode *pErrorCode); + +/** + * Converts a whole domain name into its ASCII form for DNS lookup. + * If any processing step fails, then pInfo->errors will be non-zero and + * the result might not be an ASCII string. + * The domain name might be modified according to the types of errors. + * Labels with severe errors will be left in (or turned into) their Unicode form. + * + * The UErrorCode indicates an error only in exceptional cases, + * such as a U_MEMORY_ALLOCATION_ERROR. + * + * @param idna UIDNA instance + * @param name Input domain name + * @param length Domain name length, or -1 if NUL-terminated + * @param dest Destination string buffer + * @param capacity Destination buffer capacity + * @param pInfo Output container of IDNA processing details. + * @param pErrorCode Standard ICU error code. Its input value must + * pass the U_SUCCESS() test, or else the function returns + * immediately. Check for U_FAILURE() on output or use with + * function chaining. (See User Guide for details.) + * @return destination string length + * @draft ICU 4.6 + */ +U_DRAFT int32_t U_EXPORT2 +uidna_nameToASCII(const UIDNA *idna, + const UChar *name, int32_t length, + UChar *dest, int32_t capacity, + UIDNAInfo *pInfo, UErrorCode *pErrorCode); + +/** + * Converts a whole domain name into its Unicode form for human-readable display. + * If any processing step fails, then pInfo->errors will be non-zero. + * The domain name might be modified according to the types of errors. + * + * The UErrorCode indicates an error only in exceptional cases, + * such as a U_MEMORY_ALLOCATION_ERROR. + * + * @param idna UIDNA instance + * @param name Input domain name + * @param length Domain name length, or -1 if NUL-terminated + * @param dest Destination string buffer + * @param capacity Destination buffer capacity + * @param pInfo Output container of IDNA processing details. + * @param pErrorCode Standard ICU error code. Its input value must + * pass the U_SUCCESS() test, or else the function returns + * immediately. Check for U_FAILURE() on output or use with + * function chaining. (See User Guide for details.) + * @return destination string length + * @draft ICU 4.6 + */ +U_DRAFT int32_t U_EXPORT2 +uidna_nameToUnicode(const UIDNA *idna, + const UChar *name, int32_t length, + UChar *dest, int32_t capacity, + UIDNAInfo *pInfo, UErrorCode *pErrorCode); + +/* UTF-8 versions of the processing methods --------------------------------- */ + +/** + * Converts a single domain name label into its ASCII form for DNS lookup. + * UTF-8 version of uidna_labelToASCII(), same behavior. + * + * @param idna UIDNA instance + * @param label Input domain name label + * @param length Label length, or -1 if NUL-terminated + * @param dest Destination string buffer + * @param capacity Destination buffer capacity + * @param pInfo Output container of IDNA processing details. + * @param pErrorCode Standard ICU error code. Its input value must + * pass the U_SUCCESS() test, or else the function returns + * immediately. Check for U_FAILURE() on output or use with + * function chaining. (See User Guide for details.) + * @return destination string length + * @draft ICU 4.6 + */ +U_DRAFT int32_t U_EXPORT2 +uidna_labelToASCII_UTF8(const UIDNA *idna, + const char *label, int32_t length, + char *dest, int32_t capacity, + UIDNAInfo *pInfo, UErrorCode *pErrorCode); + +/** + * Converts a single domain name label into its Unicode form for human-readable display. + * UTF-8 version of uidna_labelToUnicode(), same behavior. + * + * @param idna UIDNA instance + * @param label Input domain name label + * @param length Label length, or -1 if NUL-terminated + * @param dest Destination string buffer + * @param capacity Destination buffer capacity + * @param pInfo Output container of IDNA processing details. + * @param pErrorCode Standard ICU error code. Its input value must + * pass the U_SUCCESS() test, or else the function returns + * immediately. Check for U_FAILURE() on output or use with + * function chaining. (See User Guide for details.) + * @return destination string length + * @draft ICU 4.6 + */ +U_DRAFT int32_t U_EXPORT2 +uidna_labelToUnicodeUTF8(const UIDNA *idna, + const char *label, int32_t length, + char *dest, int32_t capacity, + UIDNAInfo *pInfo, UErrorCode *pErrorCode); + +/** + * Converts a whole domain name into its ASCII form for DNS lookup. + * UTF-8 version of uidna_nameToASCII(), same behavior. + * + * @param idna UIDNA instance + * @param name Input domain name + * @param length Domain name length, or -1 if NUL-terminated + * @param dest Destination string buffer + * @param capacity Destination buffer capacity + * @param pInfo Output container of IDNA processing details. + * @param pErrorCode Standard ICU error code. Its input value must + * pass the U_SUCCESS() test, or else the function returns + * immediately. Check for U_FAILURE() on output or use with + * function chaining. (See User Guide for details.) + * @return destination string length + * @draft ICU 4.6 + */ +U_DRAFT int32_t U_EXPORT2 +uidna_nameToASCII_UTF8(const UIDNA *idna, + const char *name, int32_t length, + char *dest, int32_t capacity, + UIDNAInfo *pInfo, UErrorCode *pErrorCode); + +/** + * Converts a whole domain name into its Unicode form for human-readable display. + * UTF-8 version of uidna_nameToUnicode(), same behavior. + * + * @param idna UIDNA instance + * @param name Input domain name + * @param length Domain name length, or -1 if NUL-terminated + * @param dest Destination string buffer + * @param capacity Destination buffer capacity + * @param pInfo Output container of IDNA processing details. + * @param pErrorCode Standard ICU error code. Its input value must + * pass the U_SUCCESS() test, or else the function returns + * immediately. Check for U_FAILURE() on output or use with + * function chaining. (See User Guide for details.) + * @return destination string length + * @draft ICU 4.6 + */ +U_DRAFT int32_t U_EXPORT2 +uidna_nameToUnicodeUTF8(const UIDNA *idna, + const char *name, int32_t length, + char *dest, int32_t capacity, + UIDNAInfo *pInfo, UErrorCode *pErrorCode); + +/* + * IDNA error bit set values. + * When a domain name or label fails a processing step or does not meet the + * validity criteria, then one or more of these error bits are set. + */ +enum { + /** + * A non-final domain name label (or the whole domain name) is empty. + * @draft ICU 4.6 + */ + UIDNA_ERROR_EMPTY_LABEL=1, + /** + * A domain name label is longer than 63 bytes. + * (See STD13/RFC1034 3.1. Name space specifications and terminology.) + * This is only checked in ToASCII operations, and only if the UIDNA_USE_STD3_RULES is set. + * @draft ICU 4.6 + */ + UIDNA_ERROR_LABEL_TOO_LONG=2, + /** + * A domain name is longer than 255 bytes in its storage form. + * (See STD13/RFC1034 3.1. Name space specifications and terminology.) + * This is only checked in ToASCII operations, and only if the UIDNA_USE_STD3_RULES is set. + * @draft ICU 4.6 + */ + UIDNA_ERROR_DOMAIN_NAME_TOO_LONG=4, + /** + * A label starts with a hyphen-minus ('-'). + * @draft ICU 4.6 + */ + UIDNA_ERROR_LEADING_HYPHEN=8, + /** + * A label ends with a hyphen-minus ('-'). + * @draft ICU 4.6 + */ + UIDNA_ERROR_TRAILING_HYPHEN=0x10, + /** + * A label contains hyphen-minus ('-') in the third and fourth positions. + * @draft ICU 4.6 + */ + UIDNA_ERROR_HYPHEN_3_4=0x20, + /** + * A label starts with a combining mark. + * @draft ICU 4.6 + */ + UIDNA_ERROR_LEADING_COMBINING_MARK=0x40, + /** + * A label or domain name contains disallowed characters. + * @draft ICU 4.6 + */ + UIDNA_ERROR_DISALLOWED=0x80, + /** + * A label starts with "xn--" but does not contain valid Punycode. + * That is, an xn-- label failed Punycode decoding. + * @draft ICU 4.6 + */ + UIDNA_ERROR_PUNYCODE=0x100, + /** + * A label contains a dot=full stop. + * This can occur in an input string for a single-label function. + * @draft ICU 4.6 + */ + UIDNA_ERROR_LABEL_HAS_DOT=0x200, + /** + * An ACE label does not contain a valid label string. + * The label was successfully ACE (Punycode) decoded but the resulting + * string had severe validation errors. For example, + * it might contain characters that are not allowed in ACE labels, + * or it might not be normalized. + * @draft ICU 4.6 + */ + UIDNA_ERROR_INVALID_ACE_LABEL=0x400, + /** + * A label does not meet the IDNA BiDi requirements (for right-to-left characters). + * @draft ICU 4.6 + */ + UIDNA_ERROR_BIDI=0x800, + /** + * A label does not meet the IDNA CONTEXTJ requirements. + * @draft ICU 4.6 + */ + UIDNA_ERROR_CONTEXTJ=0x1000 +}; + +/* IDNA2003 API ------------------------------------------------------------- */ + +/** + * IDNA2003: This function implements the ToASCII operation as defined in the IDNA RFC. + * This operation is done on single labels before sending it to something that expects + * ASCII names. A label is an individual part of a domain name. Labels are usually + * separated by dots; e.g. "www.example.com" is composed of 3 labels "www","example", and "com". + * + * IDNA2003 API Overview: + * + * The uidna_ API implements the IDNA protocol as defined in the IDNA RFC * (http://www.ietf.org/rfc/rfc3490.txt). - * The RFC defines 2 operations: ToASCII and ToUnicode. Domain labels - * containing non-ASCII code points are required to be processed by + * The RFC defines 2 operations: ToASCII and ToUnicode. Domain name labels + * containing non-ASCII code points are processed by the * ToASCII operation before passing it to resolver libraries. Domain names - * that are obtained from resolver libraries are required to be processed by + * that are obtained from resolver libraries are processed by the * ToUnicode operation before displaying the domain name to the user. * IDNA requires that implementations process input strings with Nameprep - * (http://www.ietf.org/rfc/rfc3491.txt), - * which is a profile of Stringprep (http://www.ietf.org/rfc/rfc3454.txt), - * and then with Punycode (http://www.ietf.org/rfc/rfc3492.txt). - * Implementations of IDNA MUST fully implement Nameprep and Punycode; + * (http://www.ietf.org/rfc/rfc3491.txt), + * which is a profile of Stringprep (http://www.ietf.org/rfc/rfc3454.txt), + * and then with Punycode (http://www.ietf.org/rfc/rfc3492.txt). + * Implementations of IDNA MUST fully implement Nameprep and Punycode; * neither Nameprep nor Punycode are optional. - * The input and output of ToASCII and ToUnicode operations are Unicode + * The input and output of ToASCII and ToUnicode operations are Unicode * and are designed to be chainable, i.e., applying ToASCII or ToUnicode operations * multiple times to an input string will yield the same result as applying the operation * once. * ToUnicode(ToUnicode(ToUnicode...(ToUnicode(string)))) == ToUnicode(string) * ToASCII(ToASCII(ToASCII...(ToASCII(string))) == ToASCII(string). * - */ - -/** - * Option to prohibit processing of unassigned codepoints in the input and - * do not check if the input conforms to STD-3 ASCII rules. - * - * @see uidna_toASCII uidna_toUnicode - * @stable ICU 2.6 - */ -#define UIDNA_DEFAULT 0x0000 -/** - * Option to allow processing of unassigned codepoints in the input - * - * @see uidna_toASCII uidna_toUnicode - * @stable ICU 2.6 - */ -#define UIDNA_ALLOW_UNASSIGNED 0x0001 -/** - * Option to check if input conforms to STD-3 ASCII rules - * - * @see uidna_toASCII uidna_toUnicode - * @stable ICU 2.6 - */ -#define UIDNA_USE_STD3_RULES 0x0002 - -/** - * This function implements the ToASCII operation as defined in the IDNA RFC. - * This operation is done on single labels before sending it to something that expects - * ASCII names. A label is an individual part of a domain name. Labels are usually - * separated by dots; e.g. "www.example.com" is composed of 3 labels "www","example", and "com". - * - * * @param src Input UChar array containing label in Unicode. * @param srcLength Number of UChars in src, or -1 if NUL-terminated. * @param dest Output UChar array with ASCII (ACE encoded) label. @@ -93,7 +517,7 @@ * - UIDNA_ALLOW_UNASSIGNED Unassigned values can be converted to ASCII for query operations * If this option is set, the unassigned code points are in the input * are treated as normal Unicode code points. - * + * * - UIDNA_USE_STD3_RULES Use STD3 ASCII rules for host name syntax restrictions * If this option is set and the input does not satisfy STD3 rules, * the operation will fail with U_IDNA_STD3_ASCII_RULES_ERROR @@ -119,7 +543,7 @@ uidna_toASCII(const UChar* src, int32_t srcLength, /** - * This function implements the ToUnicode operation as defined in the IDNA RFC. + * IDNA2003: This function implements the ToUnicode operation as defined in the IDNA RFC. * This operation is done on single labels before sending it to something that expects * Unicode names. A label is an individual part of a domain name. Labels are usually * separated by dots; for e.g. "www.example.com" is composed of 3 labels "www","example", and "com". @@ -129,7 +553,7 @@ uidna_toASCII(const UChar* src, int32_t srcLength, * @param dest Output Converted UChar array containing Unicode equivalent of label. * @param destCapacity Size of dest. * @param options A bit set of options: - * + * * - UIDNA_DEFAULT Use default options, i.e., do not process unassigned code points * and do not use STD3 ASCII rules * If unassigned code points are found the operation fails with @@ -142,8 +566,6 @@ uidna_toASCII(const UChar* src, int32_t srcLength, * verification of decoded ACE input by applying toASCII and comparing * its output with source * - * - * * - UIDNA_USE_STD3_RULES Use STD3 ASCII rules for host name syntax restrictions * If this option is set and the input does not satisfy STD3 rules, * the operation will fail with U_IDNA_STD3_ASCII_RULES_ERROR @@ -169,12 +591,12 @@ uidna_toUnicode(const UChar* src, int32_t srcLength, /** - * Convenience function that implements the IDNToASCII operation as defined in the IDNA RFC. + * IDNA2003: Convenience function that implements the IDNToASCII operation as defined in the IDNA RFC. * This operation is done on complete domain names, e.g: "www.example.com". * It is important to note that this operation can fail. If it fails, then the input * domain name cannot be used as an Internationalized Domain Name and the application * should have methods defined to deal with the failure. - * + * * Note: IDNA RFC specifies that a conformant application should divide a domain name * into separate labels, decide whether to apply allowUnassigned and useSTD3ASCIIRules on each, * and then convert. This function does not offer that level of granularity. The options once @@ -185,7 +607,7 @@ uidna_toUnicode(const UChar* src, int32_t srcLength, * @param dest Output UChar array with ASCII (ACE encoded) IDN. * @param destCapacity Size of dest. * @param options A bit set of options: - * + * * - UIDNA_DEFAULT Use default options, i.e., do not process unassigned code points * and do not use STD3 ASCII rules * If unassigned code points are found the operation fails with @@ -194,11 +616,11 @@ uidna_toUnicode(const UChar* src, int32_t srcLength, * - UIDNA_ALLOW_UNASSIGNED Unassigned values can be converted to ASCII for query operations * If this option is set, the unassigned code points are in the input * are treated as normal Unicode code points. - * + * * - UIDNA_USE_STD3_RULES Use STD3 ASCII rules for host name syntax restrictions * If this option is set and the input does not satisfy STD3 rules, * the operation will fail with U_IDNA_STD3_ASCII_RULES_ERROR - * + * * @param parseError Pointer to UParseError struct to receive information on position * of error if an error is encountered. Can be NULL. * @param status ICU in/out error code parameter. @@ -219,7 +641,7 @@ uidna_IDNToASCII( const UChar* src, int32_t srcLength, UErrorCode* status); /** - * Convenience function that implements the IDNToUnicode operation as defined in the IDNA RFC. + * IDNA2003: Convenience function that implements the IDNToUnicode operation as defined in the IDNA RFC. * This operation is done on complete domain names, e.g: "www.example.com". * * Note: IDNA RFC specifies that a conformant application should divide a domain name @@ -232,7 +654,7 @@ uidna_IDNToASCII( const UChar* src, int32_t srcLength, * @param dest Output UChar array containing Unicode equivalent of source IDN. * @param destCapacity Size of dest. * @param options A bit set of options: - * + * * - UIDNA_DEFAULT Use default options, i.e., do not process unassigned code points * and do not use STD3 ASCII rules * If unassigned code points are found the operation fails with @@ -241,7 +663,7 @@ uidna_IDNToASCII( const UChar* src, int32_t srcLength, * - UIDNA_ALLOW_UNASSIGNED Unassigned values can be converted to ASCII for query operations * If this option is set, the unassigned code points are in the input * are treated as normal Unicode code points. - * + * * - UIDNA_USE_STD3_RULES Use STD3 ASCII rules for host name syntax restrictions * If this option is set and the input does not satisfy STD3 rules, * the operation will fail with U_IDNA_STD3_ASCII_RULES_ERROR @@ -266,7 +688,7 @@ uidna_IDNToUnicode( const UChar* src, int32_t srcLength, UErrorCode* status); /** - * Compare two IDN strings for equivalence. + * IDNA2003: Compare two IDN strings for equivalence. * This function splits the domain names into labels and compares them. * According to IDN RFC, whenever two labels are compared, they are * considered equal if and only if their ASCII forms (obtained by @@ -280,7 +702,7 @@ uidna_IDNToUnicode( const UChar* src, int32_t srcLength, * @param s2 Second source string. * @param length2 Length of second source string, or -1 if NUL-terminated. * @param options A bit set of options: - * + * * - UIDNA_DEFAULT Use default options, i.e., do not process unassigned code points * and do not use STD3 ASCII rules * If unassigned code points are found the operation fails with @@ -289,7 +711,7 @@ uidna_IDNToUnicode( const UChar* src, int32_t srcLength, * - UIDNA_ALLOW_UNASSIGNED Unassigned values can be converted to ASCII for query operations * If this option is set, the unassigned code points are in the input * are treated as normal Unicode code points. - * + * * - UIDNA_USE_STD3_RULES Use STD3 ASCII rules for host name syntax restrictions * If this option is set and the input does not satisfy STD3 rules, * the operation will fail with U_IDNA_STD3_ASCII_RULES_ERROR diff --git a/icu4c/source/common/unicode/unistr.h b/icu4c/source/common/unicode/unistr.h index aba4c45a92..d8a399ff0f 100644 --- a/icu4c/source/common/unicode/unistr.h +++ b/icu4c/source/common/unicode/unistr.h @@ -1600,6 +1600,7 @@ public: * Calls u_strToUTF8WithSub(). * * @param sink A ByteSink to which the UTF-8 version of the string is written. + * sink.Flush() is called at the end. * @stable ICU 4.2 * @see toUTF8String */ diff --git a/icu4c/source/common/unicode/unorm2.h b/icu4c/source/common/unicode/unorm2.h index 25af203b19..8c6c5f91d9 100644 --- a/icu4c/source/common/unicode/unorm2.h +++ b/icu4c/source/common/unicode/unorm2.h @@ -89,17 +89,17 @@ typedef enum { * @stable ICU 2.0 */ typedef enum UNormalizationCheckResult { - /** + /** * The input string is not in the normalization form. * @stable ICU 2.0 */ UNORM_NO, - /** + /** * The input string is in the normalization form. * @stable ICU 2.0 */ UNORM_YES, - /** + /** * The input string may or may not be in the normalization form. * This value is only returned for composition forms like NFC and FCC, * when a backward-combining character is found for which the surrounding text @@ -151,7 +151,7 @@ unorm2_getInstance(const char *packageName, * Both are aliased and must not be modified or deleted while this object * is used. * The filter set should be frozen; otherwise the performance will suffer greatly. - * @param norm2 wrapped Normalizer2 instance + * @param norm2 wrapped UNormalizer2 instance * @param filterSet USet which determines the characters to be normalized * @param pErrorCode Standard ICU error code. Its input value must * pass the U_SUCCESS() test, or else the function returns diff --git a/icu4c/source/common/unistr.cpp b/icu4c/source/common/unistr.cpp index d5b2e87f55..ace989bf9a 100644 --- a/icu4c/source/common/unistr.cpp +++ b/icu4c/source/common/unistr.cpp @@ -867,6 +867,7 @@ UnicodeString::toUTF8(ByteSink &sink) const { } if(U_SUCCESS(errorCode)) { sink.Append(utf8, length8); + sink.Flush(); } if(utf8IsOwned) { uprv_free(utf8); diff --git a/icu4c/source/common/uts46.cpp b/icu4c/source/common/uts46.cpp new file mode 100644 index 0000000000..bbfc5e6c94 --- /dev/null +++ b/icu4c/source/common/uts46.cpp @@ -0,0 +1,1333 @@ +/* +******************************************************************************* +* Copyright (C) 2010, International Business Machines +* Corporation and others. All Rights Reserved. +******************************************************************************* +* file name: uts46.cpp +* encoding: US-ASCII +* tab size: 8 (not used) +* indentation:4 +* +* created on: 2010mar09 +* created by: Markus W. Scherer +*/ + +#include "unicode/utypes.h" + +#if !UCONFIG_NO_IDNA + +#include "unicode/idna.h" +#include "unicode/normalizer2.h" +#include "unicode/ustring.h" +#include "cmemory.h" +#include "cstring.h" +#include "punycode.h" +#include "ustr_imp.h" + +#define LENGTHOF(array) (int32_t)(sizeof(array)/sizeof((array)[0])) + +// Note about tests for UIDNA_ERROR_DOMAIN_NAME_TOO_LONG: +// +// The domain name length limit is 255 octets in an internal DNS representation +// where the last ("root") label is the empty label +// represented by length byte 0 alone. +// In a conventional string, this translates to 253 characters, or 254 +// if there is a trailing dot for the root label. + +U_NAMESPACE_BEGIN + +// Severe errors which usually result in a U+FFFD replacement character in the result string. +const uint32_t severeErrors= + UIDNA_ERROR_LEADING_COMBINING_MARK| + UIDNA_ERROR_DISALLOWED| + UIDNA_ERROR_PUNYCODE| + UIDNA_ERROR_LABEL_HAS_DOT| + UIDNA_ERROR_INVALID_ACE_LABEL; + +static inline UBool +isASCIIString(const UnicodeString &dest) { + const UChar *s=dest.getBuffer(); + const UChar *limit=s+dest.length(); + while(s0x7f) { + return FALSE; + } + } + return TRUE; +} + +static UBool +isASCIIOkBiDi(const UChar *s, int32_t length); + +static UBool +isASCIIOkBiDi(const char *s, int32_t length); + +// IDNA class default implementations -------------------------------------- *** + +void +IDNA::labelToASCII_UTF8(const StringPiece &label, ByteSink &dest, + IDNAInfo &info, UErrorCode &errorCode) const { + if(U_SUCCESS(errorCode)) { + UnicodeString destString; + labelToASCII(UnicodeString::fromUTF8(label), destString, + info, errorCode).toUTF8(dest); + } +} + +void +IDNA::labelToUnicodeUTF8(const StringPiece &label, ByteSink &dest, + IDNAInfo &info, UErrorCode &errorCode) const { + if(U_SUCCESS(errorCode)) { + UnicodeString destString; + labelToUnicode(UnicodeString::fromUTF8(label), destString, + info, errorCode).toUTF8(dest); + } +} + +void +IDNA::nameToASCII_UTF8(const StringPiece &name, ByteSink &dest, + IDNAInfo &info, UErrorCode &errorCode) const { + if(U_SUCCESS(errorCode)) { + UnicodeString destString; + nameToASCII(UnicodeString::fromUTF8(name), destString, + info, errorCode).toUTF8(dest); + } +} + +void +IDNA::nameToUnicodeUTF8(const StringPiece &name, ByteSink &dest, + IDNAInfo &info, UErrorCode &errorCode) const { + if(U_SUCCESS(errorCode)) { + UnicodeString destString; + nameToUnicode(UnicodeString::fromUTF8(name), destString, + info, errorCode).toUTF8(dest); + } +} + +UOBJECT_DEFINE_NO_RTTI_IMPLEMENTATION(IDNA) + +// UTS46 class declaration ------------------------------------------------- *** + +class UTS46 : public IDNA { +public: + UTS46(uint32_t options, UErrorCode &errorCode); + virtual ~UTS46(); + + virtual UnicodeString & + labelToASCII(const UnicodeString &label, UnicodeString &dest, + IDNAInfo &info, UErrorCode &errorCode) const; + + virtual UnicodeString & + labelToUnicode(const UnicodeString &label, UnicodeString &dest, + IDNAInfo &info, UErrorCode &errorCode) const; + + virtual UnicodeString & + nameToASCII(const UnicodeString &name, UnicodeString &dest, + IDNAInfo &info, UErrorCode &errorCode) const; + + virtual UnicodeString & + nameToUnicode(const UnicodeString &name, UnicodeString &dest, + IDNAInfo &info, UErrorCode &errorCode) const; + + virtual void + labelToASCII_UTF8(const StringPiece &label, ByteSink &dest, + IDNAInfo &info, UErrorCode &errorCode) const; + + virtual void + labelToUnicodeUTF8(const StringPiece &label, ByteSink &dest, + IDNAInfo &info, UErrorCode &errorCode) const; + + virtual void + nameToASCII_UTF8(const StringPiece &name, ByteSink &dest, + IDNAInfo &info, UErrorCode &errorCode) const; + + virtual void + nameToUnicodeUTF8(const StringPiece &name, ByteSink &dest, + IDNAInfo &info, UErrorCode &errorCode) const; + +private: + UnicodeString & + process(const UnicodeString &src, + UBool isLabel, UBool toASCII, + UnicodeString &dest, + IDNAInfo &info, UErrorCode &errorCode) const; + + void + processUTF8(const StringPiece &src, + UBool isLabel, UBool toASCII, + ByteSink &dest, + IDNAInfo &info, UErrorCode &errorCode) const; + + UnicodeString & + processUnicode(const UnicodeString &src, + int32_t labelStart, int32_t mappingStart, + UBool isLabel, UBool toASCII, + UnicodeString &dest, + IDNAInfo &info, UErrorCode &errorCode) const; + + // returns the new dest.length() + int32_t + mapDevChars(UnicodeString &dest, int32_t labelStart, int32_t mappingStart, + UErrorCode &errorCode) const; + + // returns the new label length + int32_t + processLabel(UnicodeString &dest, + int32_t labelStart, int32_t labelLength, + UBool toASCII, + IDNAInfo &info, UErrorCode &errorCode) const; + int32_t + markBadACELabel(UnicodeString &dest, + int32_t labelStart, int32_t labelLength, + UBool toASCII, IDNAInfo &info) const; + + void + checkLabelBiDi(const UChar *label, int32_t labelLength, IDNAInfo &info) const; + + UBool + isLabelOkContextJ(const UChar *label, int32_t labelLength) const; + + const Normalizer2 &uts46Norm2; // uts46.nrm + uint32_t options; +}; + +IDNA * +IDNA::createUTS46Instance(uint32_t options, UErrorCode &errorCode) { + if(U_SUCCESS(errorCode)) { + IDNA *idna=new UTS46(options, errorCode); + if(idna==NULL) { + errorCode=U_MEMORY_ALLOCATION_ERROR; + } else if(U_FAILURE(errorCode)) { + delete idna; + idna=NULL; + } + return idna; + } else { + return NULL; + } +} + +// UTS46 implementation ---------------------------------------------------- *** + +UTS46::UTS46(uint32_t opt, UErrorCode &errorCode) + : uts46Norm2(*Normalizer2::getInstance(NULL, "uts46", UNORM2_COMPOSE, errorCode)), + options(opt) {} + +UTS46::~UTS46() {} + +UnicodeString & +UTS46::labelToASCII(const UnicodeString &label, UnicodeString &dest, + IDNAInfo &info, UErrorCode &errorCode) const { + return process(label, TRUE, TRUE, dest, info, errorCode); +} + +UnicodeString & +UTS46::labelToUnicode(const UnicodeString &label, UnicodeString &dest, + IDNAInfo &info, UErrorCode &errorCode) const { + return process(label, TRUE, FALSE, dest, info, errorCode); +} + +UnicodeString & +UTS46::nameToASCII(const UnicodeString &name, UnicodeString &dest, + IDNAInfo &info, UErrorCode &errorCode) const { + process(name, FALSE, TRUE, dest, info, errorCode); + if( dest.length()>=254 && (info.errors&UIDNA_ERROR_DOMAIN_NAME_TOO_LONG)==0 && + isASCIIString(dest) && + (dest.length()>254 || dest[253]!=0x2e) + ) { + info.errors|=UIDNA_ERROR_DOMAIN_NAME_TOO_LONG; + } + return dest; +} + +UnicodeString & +UTS46::nameToUnicode(const UnicodeString &name, UnicodeString &dest, + IDNAInfo &info, UErrorCode &errorCode) const { + return process(name, FALSE, FALSE, dest, info, errorCode); +} + +void +UTS46::labelToASCII_UTF8(const StringPiece &label, ByteSink &dest, + IDNAInfo &info, UErrorCode &errorCode) const { + processUTF8(label, TRUE, TRUE, dest, info, errorCode); +} + +void +UTS46::labelToUnicodeUTF8(const StringPiece &label, ByteSink &dest, + IDNAInfo &info, UErrorCode &errorCode) const { + processUTF8(label, TRUE, FALSE, dest, info, errorCode); +} + +void +UTS46::nameToASCII_UTF8(const StringPiece &name, ByteSink &dest, + IDNAInfo &info, UErrorCode &errorCode) const { + processUTF8(name, FALSE, TRUE, dest, info, errorCode); +} + +void +UTS46::nameToUnicodeUTF8(const StringPiece &name, ByteSink &dest, + IDNAInfo &info, UErrorCode &errorCode) const { + processUTF8(name, FALSE, FALSE, dest, info, errorCode); +} + +// UTS #46 data for ASCII characters. +// The normalizer (using uts46.nrm) maps uppercase ASCII letters to lowercase +// and passes through all other ASCII characters. +// If UIDNA_USE_STD3_RULES is set, then non-LDH characters are disallowed +// using this data. +// The ASCII fastpath also uses this data. +// Values: -1=disallowed 0==valid 1==mapped (lowercase) +static const int8_t asciiData[128]={ + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + // 002D..002E; valid # HYPHEN-MINUS..FULL STOP + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 0, -1, + // 0030..0039; valid # DIGIT ZERO..DIGIT NINE + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, -1, -1, -1, -1, + // 0041..005A; mapped # LATIN CAPITAL LETTER A..LATIN CAPITAL LETTER Z + -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, + // 0061..007A; valid # LATIN SMALL LETTER A..LATIN SMALL LETTER Z + -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, -1, -1, -1 +}; + +UnicodeString & +UTS46::process(const UnicodeString &src, + UBool isLabel, UBool toASCII, + UnicodeString &dest, + IDNAInfo &info, UErrorCode &errorCode) const { + // uts46Norm2.normalize() would do all of this error checking and setup, + // but with the ASCII fastpath we do not always call it, and do not + // call it first. + if(U_FAILURE(errorCode)) { + dest.setToBogus(); + return dest; + } + const UChar *srcArray=src.getBuffer(); + if(&dest==&src || srcArray==NULL) { + errorCode=U_ILLEGAL_ARGUMENT_ERROR; + dest.setToBogus(); + return dest; + } + // Arguments are fine, reset output values. + dest.remove(); + info.reset(); + int32_t srcLength=src.length(); + if(srcLength==0) { + if(toASCII) { + info.errors|=UIDNA_ERROR_EMPTY_LABEL; + } + return dest; + } + UChar *destArray=dest.getBuffer(srcLength); + if(destArray==NULL) { + errorCode=U_MEMORY_ALLOCATION_ERROR; + return dest; + } + // ASCII fastpath + UBool disallowNonLDHDot=(options&UIDNA_USE_STD3_RULES)!=0; + int32_t labelStart=0; + int32_t i; + for(i=0;; ++i) { + if(i==srcLength) { + if(toASCII) { + if((i-labelStart)>63) { + info.labelErrors|=UIDNA_ERROR_LABEL_TOO_LONG; + } + // There is a trailing dot if labelStart==i. + if(!isLabel && i>=254 && (i>254 || labelStart0x7f) { + break; + } + int cData=asciiData[c]; + if(cData>0) { + destArray[i]=c+0x20; // Lowercase an uppercase ASCII letter. + } else if(cData<0 && disallowNonLDHDot) { + break; // Replacing with U+FFFD can be complicated for toASCII. + } else { + destArray[i]=c; + if(c==0x2d) { // hyphen + if(i==(labelStart+3) && srcArray[i-1]==0x2d) { + // "??--..." is Punycode or forbidden. + break; + } + if(i==labelStart) { + // label starts with "-" + info.labelErrors|=UIDNA_ERROR_LEADING_HYPHEN; + } + if((i+1)==srcLength || srcArray[i+1]==0x2e) { + // label ends with "-" + info.labelErrors|=UIDNA_ERROR_TRAILING_HYPHEN; + } + } else if(c==0x2e) { // dot + if(isLabel) { + break; // Replacing with U+FFFD can be complicated for toASCII. + } + if(toASCII) { + // Permit an empty label at the end but not elsewhere. + if(i==labelStart && i<(srcLength-1)) { + info.labelErrors|=UIDNA_ERROR_EMPTY_LABEL; + } else if((i-labelStart)>63) { + info.labelErrors|=UIDNA_ERROR_LABEL_TOO_LONG; + } + } + info.errors|=info.labelErrors; + info.labelErrors=0; + labelStart=i+1; + } + } + } + info.errors|=info.labelErrors; + dest.releaseBuffer(i); + processUnicode(src, labelStart, i, isLabel, toASCII, dest, info, errorCode); + if( info.isBiDi && U_SUCCESS(errorCode) && (info.errors&severeErrors)==0 && + (!info.isOkBiDi || (labelStart>0 && !isASCIIOkBiDi(dest.getBuffer(), labelStart))) + ) { + info.errors|=UIDNA_ERROR_BIDI; + } + return dest; +} + +void +UTS46::processUTF8(const StringPiece &src, + UBool isLabel, UBool toASCII, + ByteSink &dest, + IDNAInfo &info, UErrorCode &errorCode) const { + if(U_FAILURE(errorCode)) { + return; + } + const char *srcArray=src.data(); + int32_t srcLength=src.length(); + if(srcArray==NULL && srcLength!=0) { + errorCode=U_ILLEGAL_ARGUMENT_ERROR; + return; + } + // Arguments are fine, reset output values. + info.reset(); + if(srcLength==0) { + if(toASCII) { + info.errors|=UIDNA_ERROR_EMPTY_LABEL; + } + dest.Flush(); + return; + } + UnicodeString destString; + int32_t labelStart=0; + if(srcLength<=256) { // length of stackArray[] + // ASCII fastpath + char stackArray[256]; + int32_t destCapacity; + char *destArray=dest.GetAppendBuffer(srcLength, srcLength+20, + stackArray, LENGTHOF(stackArray), &destCapacity); + UBool disallowNonLDHDot=(options&UIDNA_USE_STD3_RULES)!=0; + int32_t i; + for(i=0;; ++i) { + if(i==srcLength) { + if(toASCII) { + if((i-labelStart)>63) { + info.labelErrors|=UIDNA_ERROR_LABEL_TOO_LONG; + } + // There is a trailing dot if labelStart==i. + if(!isLabel && i>=254 && (i>254 || labelStart0x7f + break; + } + int cData=asciiData[(int)c]; // Cast: gcc warns about indexing with a char. + if(cData>0) { + destArray[i]=c+0x20; // Lowercase an uppercase ASCII letter. + } else if(cData<0 && disallowNonLDHDot) { + break; // Replacing with U+FFFD can be complicated for toASCII. + } else { + destArray[i]=c; + if(c==0x2d) { // hyphen + if(i==(labelStart+3) && srcArray[i-1]==0x2d) { + // "??--..." is Punycode or forbidden. + break; + } + if(i==labelStart) { + // label starts with "-" + info.labelErrors|=UIDNA_ERROR_LEADING_HYPHEN; + } + if((i+1)==srcLength || srcArray[i+1]==0x2e) { + // label ends with "-" + info.labelErrors|=UIDNA_ERROR_TRAILING_HYPHEN; + } + } else if(c==0x2e) { // dot + if(isLabel) { + break; // Replacing with U+FFFD can be complicated for toASCII. + } + if(toASCII) { + // Permit an empty label at the end but not elsewhere. + if(i==labelStart && i<(srcLength-1)) { + info.labelErrors|=UIDNA_ERROR_EMPTY_LABEL; + } else if((i-labelStart)>63) { + info.labelErrors|=UIDNA_ERROR_LABEL_TOO_LONG; + } + } + info.errors|=info.labelErrors; + info.labelErrors=0; + labelStart=i+1; + } + } + } + info.errors|=info.labelErrors; + // Convert the processed ASCII prefix of the current label to UTF-16. + int32_t mappingStart=i-labelStart; + destString=UnicodeString::fromUTF8(StringPiece(destArray+labelStart, mappingStart)); + // Output the previous ASCII labels and process the rest of src in UTF-16. + dest.Append(destArray, labelStart); + processUnicode(UnicodeString::fromUTF8(StringPiece(src, labelStart)), 0, mappingStart, + isLabel, toASCII, + destString, info, errorCode); + } else { + // src is too long for the ASCII fastpath implementation. + processUnicode(UnicodeString::fromUTF8(src), 0, 0, + isLabel, toASCII, + destString, info, errorCode); + } + destString.toUTF8(dest); // calls dest.Flush() + if(toASCII && !isLabel) { + // length==labelStart==254 means that there is a trailing dot (ok) and + // destString is empty (do not index at 253-labelStart). + int32_t length=labelStart+destString.length(); + if( length>=254 && isASCIIString(destString) && + (length>254 || + (labelStart<254 && destString[253-labelStart]!=0x2e)) + ) { + info.errors|=UIDNA_ERROR_DOMAIN_NAME_TOO_LONG; + } + } + if( info.isBiDi && U_SUCCESS(errorCode) && (info.errors&severeErrors)==0 && + (!info.isOkBiDi || (labelStart>0 && !isASCIIOkBiDi(srcArray, labelStart))) + ) { + info.errors|=UIDNA_ERROR_BIDI; + } +} + +UnicodeString & +UTS46::processUnicode(const UnicodeString &src, + int32_t labelStart, int32_t mappingStart, + UBool isLabel, UBool toASCII, + UnicodeString &dest, + IDNAInfo &info, UErrorCode &errorCode) const { + if(mappingStart==0) { + uts46Norm2.normalize(src, dest, errorCode); + } else { + uts46Norm2.normalizeSecondAndAppend(dest, src.tempSubString(mappingStart), errorCode); + } + if(U_FAILURE(errorCode)) { + return dest; + } + UBool doMapDevChars= + toASCII ? (options&UIDNA_NONTRANSITIONAL_TO_ASCII)==0 : + (options&UIDNA_NONTRANSITIONAL_TO_UNICODE)==0; + const UChar *destArray=dest.getBuffer(); + int32_t destLength=dest.length(); + int32_t labelLimit=labelStart; + while(labelLimit=0x200c)) { + info.isTransDiff=TRUE; + if(doMapDevChars) { + destLength=mapDevChars(dest, labelStart, labelLimit, errorCode); + if(U_FAILURE(errorCode)) { + return dest; + } + destArray=dest.getBuffer(); + // Do not increment labelLimit in case c was removed. + // All deviation characters have been mapped, no need to check for them again. + doMapDevChars=FALSE; + } else { + ++labelLimit; + } + } else { + ++labelLimit; + } + } + // Permit an empty label at the end (0=4 && label[0]==0x78 && label[1]==0x6e && label[2]==0x2d && label[3]==0x2d) { + // Label starts with "xn--", try to un-Punycode it. + wasPunycode=TRUE; + UChar *unicodeBuffer=fromPunycode.getBuffer(-1); // capacity==-1: most labels should fit + if(unicodeBuffer==NULL) { + // Should never occur if we used capacity==-1 which uses the internal buffer. + errorCode=U_MEMORY_ALLOCATION_ERROR; + return labelLength; + } + UErrorCode punycodeErrorCode=U_ZERO_ERROR; + int32_t unicodeLength=u_strFromPunycode(label+4, labelLength-4, + unicodeBuffer, fromPunycode.getCapacity(), + NULL, &punycodeErrorCode); + if(punycodeErrorCode==U_BUFFER_OVERFLOW_ERROR) { + fromPunycode.releaseBuffer(0); + unicodeBuffer=fromPunycode.getBuffer(unicodeLength); + if(unicodeBuffer==NULL) { + errorCode=U_MEMORY_ALLOCATION_ERROR; + return labelLength; + } + punycodeErrorCode=U_ZERO_ERROR; + unicodeLength=u_strFromPunycode(label+4, labelLength-4, + unicodeBuffer, fromPunycode.getCapacity(), + NULL, &punycodeErrorCode); + } + fromPunycode.releaseBuffer(unicodeLength); + if(U_FAILURE(punycodeErrorCode)) { + info.labelErrors|=UIDNA_ERROR_PUNYCODE; + return markBadACELabel(dest, labelStart, labelLength, toASCII, info); + } + // Check for NFC, and for characters that are not + // valid or deviation characters according to the normalizer. + // If there is something wrong, then the string will change. + // Note that the normalizer passes through non-LDH ASCII and deviation characters. + // Deviation characters are ok in Punycode even in transitional processing. + // In the code further below, if we find non-LDH ASCII and we have UIDNA_USE_STD3_RULES + // then we will set UIDNA_ERROR_INVALID_ACE_LABEL there too. + UBool isValid=uts46Norm2.isNormalized(fromPunycode, errorCode); + if(U_FAILURE(errorCode)) { + return labelLength; + } + if(!isValid) { + info.labelErrors|=UIDNA_ERROR_INVALID_ACE_LABEL; + return markBadACELabel(dest, labelStart, labelLength, toASCII, info); + } + labelString=&fromPunycode; + label=fromPunycode.getBuffer(); + labelStart=0; + labelLength=fromPunycode.length(); + } else { + wasPunycode=FALSE; + labelString=&dest; + } + // Validity check + if(labelLength==0) { + if(toASCII) { + info.labelErrors|=UIDNA_ERROR_EMPTY_LABEL; + } + return replaceLabel(dest, destLabelStart, destLabelLength, *labelString, labelLength); + } + // labelLength>0 + if(labelLength>=4 && label[2]==0x2d && label[3]==0x2d) { + // label starts with "??--" + info.labelErrors|=UIDNA_ERROR_HYPHEN_3_4; + } + if(label[0]==0x2d) { + // label starts with "-" + info.labelErrors|=UIDNA_ERROR_LEADING_HYPHEN; + } + if(label[labelLength-1]==0x2d) { + // label ends with "-" + info.labelErrors|=UIDNA_ERROR_TRAILING_HYPHEN; + } + // If the label was not a Punycode label, then it was the result of + // mapping, normalization and label segmentation. + // If the label was in Punycode, then we mapped it again above + // and checked its validity. + // Now we handle the STD3 restriction to LDH characters (if set) + // and we look for U+FFFD which indicates disallowed characters + // in a non-Punycode label or U+FFFD itself in a Punycode label. + // We also check for dots which can come from the input to a single-label function. + // Ok to cast away const because we own the UnicodeString. + UChar *s=(UChar *)label; + const UChar *limit=label+labelLength; + UChar oredChars=0; + // If we enforce STD3 rules, then ASCII characters other than LDH and dot are disallowed. + UBool disallowNonLDHDot=(options&UIDNA_USE_STD3_RULES)!=0; + do { + UChar c=*s; + if(c<=0x7f) { + if(c==0x2e) { + info.labelErrors|=UIDNA_ERROR_LABEL_HAS_DOT; + *s=0xfffd; + } else if(disallowNonLDHDot && asciiData[c]<0) { + info.labelErrors|=UIDNA_ERROR_DISALLOWED; + *s=0xfffd; + } + } else { + oredChars|=c; + if(c==0xfffd) { + info.labelErrors|=UIDNA_ERROR_DISALLOWED; + ++s; + } + } + ++s; + } while(sreplace(labelStart, cpLength, (UChar)0xfffd); + label=labelString->getBuffer()+labelStart; + labelLength+=1-cpLength; + if(labelString==&dest) { + destLabelLength=labelLength; + } + } + if((info.labelErrors&severeErrors)==0) { + // Do contextual checks only if we do not have U+FFFD from a severe error + // because U+FFFD can make these checks fail. + if((options&UIDNA_CHECK_BIDI)!=0 && (!info.isBiDi || info.isOkBiDi)) { + checkLabelBiDi(label, labelLength, info); + } + if( (options&UIDNA_CHECK_CONTEXTJ)!=0 && (oredChars&0x200c)==0x200c && + !isLabelOkContextJ(label, labelLength) + ) { + info.labelErrors|=UIDNA_ERROR_CONTEXTJ; + } + if(toASCII) { + if(wasPunycode) { + // Leave a Punycode label unchanged if it has no severe errors. + if(destLabelLength>63) { + info.labelErrors|=UIDNA_ERROR_LABEL_TOO_LONG; + } + return destLabelLength; + } else if(oredChars>=0x80) { + // Contains non-ASCII characters. + UnicodeString punycode; + UChar *buffer=punycode.getBuffer(63); // 63==maximum DNS label length + if(buffer==NULL) { + errorCode=U_MEMORY_ALLOCATION_ERROR; + return destLabelLength; + } + buffer[0]=0x78; // Write "xn--". + buffer[1]=0x6e; + buffer[2]=0x2d; + buffer[3]=0x2d; + int32_t punycodeLength=u_strToPunycode(label, labelLength, + buffer+4, punycode.getCapacity()-4, + NULL, &errorCode); + if(errorCode==U_BUFFER_OVERFLOW_ERROR) { + errorCode=U_ZERO_ERROR; + punycode.releaseBuffer(4); + buffer=punycode.getBuffer(4+punycodeLength); + if(buffer==NULL) { + errorCode=U_MEMORY_ALLOCATION_ERROR; + return destLabelLength; + } + punycodeLength=u_strToPunycode(label, labelLength, + buffer+4, punycode.getCapacity()-4, + NULL, &errorCode); + } + punycodeLength+=4; + punycode.releaseBuffer(punycodeLength); + if(U_FAILURE(errorCode)) { + return destLabelLength; + } + if(punycodeLength>63) { + info.labelErrors|=UIDNA_ERROR_LABEL_TOO_LONG; + } + return replaceLabel(dest, destLabelStart, destLabelLength, + punycode, punycodeLength); + } else { + // all-ASCII label + if(labelLength>63) { + info.labelErrors|=UIDNA_ERROR_LABEL_TOO_LONG; + } + } + } + } else { + // If a Punycode label has severe errors, + // then leave it but make sure it does not look valid. + if(wasPunycode) { + info.labelErrors|=UIDNA_ERROR_INVALID_ACE_LABEL; + return markBadACELabel(dest, destLabelStart, destLabelLength, toASCII, info); + } + } + return replaceLabel(dest, destLabelStart, destLabelLength, *labelString, labelLength); +} + +// Make sure an ACE label does not look valid. +// Append U+FFFD if the label has only LDH characters. +// If UIDNA_USE_STD3_RULES, also replace disallowed ASCII characters with U+FFFD. +int32_t +UTS46::markBadACELabel(UnicodeString &dest, + int32_t labelStart, int32_t labelLength, + UBool toASCII, IDNAInfo &info) const { + UBool disallowNonLDHDot=(options&UIDNA_USE_STD3_RULES)!=0; + UBool isASCII=TRUE; + UBool onlyLDH=TRUE; + const UChar *label=dest.getBuffer()+labelStart; + // Ok to cast away const because we own the UnicodeString. + UChar *s=(UChar *)label+4; // After the initial "xn--". + const UChar *limit=label+labelLength; + do { + UChar c=*s; + if(c<=0x7f) { + if(c==0x2e) { + info.labelErrors|=UIDNA_ERROR_LABEL_HAS_DOT; + *s=0xfffd; + isASCII=onlyLDH=FALSE; + } else if(asciiData[c]<0) { + onlyLDH=FALSE; + if(disallowNonLDHDot) { + *s=0xfffd; + isASCII=FALSE; + } + } + } else { + isASCII=onlyLDH=FALSE; + } + } while(++s63) { + info.labelErrors|=UIDNA_ERROR_LABEL_TOO_LONG; + } + } + return labelLength; +} + +const uint32_t L_MASK=U_MASK(U_LEFT_TO_RIGHT); +const uint32_t R_AL_MASK=U_MASK(U_RIGHT_TO_LEFT)|U_MASK(U_RIGHT_TO_LEFT_ARABIC); +const uint32_t L_R_AL_MASK=L_MASK|R_AL_MASK; + +const uint32_t R_AL_AN_MASK=R_AL_MASK|U_MASK(U_ARABIC_NUMBER); + +const uint32_t EN_AN_MASK=U_MASK(U_EUROPEAN_NUMBER)|U_MASK(U_ARABIC_NUMBER); +const uint32_t R_AL_EN_AN_MASK=R_AL_MASK|EN_AN_MASK; +const uint32_t L_EN_MASK=L_MASK|U_MASK(U_EUROPEAN_NUMBER); + +const uint32_t ES_CS_ET_ON_BN_NSM_MASK= + U_MASK(U_EUROPEAN_NUMBER_SEPARATOR)| + U_MASK(U_COMMON_NUMBER_SEPARATOR)| + U_MASK(U_EUROPEAN_NUMBER_TERMINATOR)| + U_MASK(U_OTHER_NEUTRAL)| + U_MASK(U_BOUNDARY_NEUTRAL)| + U_MASK(U_DIR_NON_SPACING_MARK); +const uint32_t L_EN_ES_CS_ET_ON_BN_NSM_MASK=L_EN_MASK|ES_CS_ET_ON_BN_NSM_MASK; +const uint32_t R_AL_AN_EN_ES_CS_ET_ON_BN_NSM_MASK=R_AL_MASK|EN_AN_MASK|ES_CS_ET_ON_BN_NSM_MASK; + +// We scan the whole label and check both for whether it contains RTL characters +// and whether it passes the BiDi Rule. +// In a BiDi domain name, all labels must pass the BiDi Rule, but we might find +// that a domain name is a BiDi domain name (has an RTL label) only after +// processing several earlier labels. +void +UTS46::checkLabelBiDi(const UChar *label, int32_t labelLength, IDNAInfo &info) const { + // IDNA2008 BiDi rule + // Get the directionality of the first character. + UChar32 c; + int32_t i=0; + U16_NEXT_UNSAFE(label, i, c); + uint32_t firstMask=U_MASK(u_charDirection(c)); + // 1. The first character must be a character with BIDI property L, R + // or AL. If it has the R or AL property, it is an RTL label; if it + // has the L property, it is an LTR label. + if((firstMask&~L_R_AL_MASK)!=0) { + info.isOkBiDi=FALSE; + } + // Get the directionality of the last non-NSM character. + uint32_t lastMask; + for(;;) { + if(i>=labelLength) { + lastMask=firstMask; + break; + } + U16_PREV_UNSAFE(label, labelLength, c); + UCharDirection dir=u_charDirection(c); + if(dir!=U_DIR_NON_SPACING_MARK) { + lastMask=U_MASK(dir); + break; + } + } + // 3. In an RTL label, the end of the label must be a character with + // BIDI property R, AL, EN or AN, followed by zero or more + // characters with BIDI property NSM. + // 6. In an LTR label, the end of the label must be a character with + // BIDI property L or EN, followed by zero or more characters with + // BIDI property NSM. + if( (firstMask&L_MASK)!=0 ? + (lastMask&~L_EN_MASK)!=0 : + (lastMask&~R_AL_EN_AN_MASK)!=0 + ) { + info.isOkBiDi=FALSE; + } + // Get the directionalities of the intervening characters. + uint32_t mask=0; + while(ilabelStart) { + c=s[i-1]; + if(!(0x61<=c && c<=0x7a) && !(0x30<=c && c<=0x39)) { + // Last character in the label is not an L or EN. + return FALSE; + } + } + labelStart=i+1; + } else if(i==labelStart) { + if(!(0x61<=c && c<=0x7a)) { + // First character in the label is not an L. + return FALSE; + } + } else { + if(c<=0x20 && (c>=0x1c || (9<=c && c<=0xd))) { + // Intermediate character in the label is a B, S or WS. + return FALSE; + } + } + } + return TRUE; +} + +// UTF-8 version, called for source ASCII prefix. +// Can contain uppercase A-Z. +// s[length-1] must be the trailing dot. +static UBool +isASCIIOkBiDi(const char *s, int32_t length) { + int32_t labelStart=0; + for(int32_t i=0; ilabelStart) { + c=s[i-1]; + if(!(0x61<=c && c<=0x7a) && !(0x41<=c && c<=0x5a) && !(0x30<=c && c<=0x39)) { + // Last character in the label is not an L or EN. + return FALSE; + } + } + labelStart=i+1; + } else if(i==labelStart) { + if(!(0x61<=c && c<=0x7a) && !(0x41<=c && c<=0x5a)) { + // First character in the label is not an L. + return FALSE; + } + } else { + if(c<=0x20 && (c>=0x1c || (9<=c && c<=0xd))) { + // Intermediate character in the label is a B, S or WS. + return FALSE; + } + } + } + return TRUE; +} + +UBool +UTS46::isLabelOkContextJ(const UChar *label, int32_t labelLength) const { + // [IDNA2008-Tables] + // 200C..200D ; CONTEXTJ # ZERO WIDTH NON-JOINER..ZERO WIDTH JOINER + for(int32_t i=0; i(IDNA::createUTS46Instance(options, *pErrorCode)); +} + +U_DRAFT void U_EXPORT2 +uidna_close(UIDNA *idna) { + delete reinterpret_cast(idna); +} + +static UBool +checkArgs(const void *label, int32_t length, + void *dest, int32_t capacity, + UIDNAInfo *pInfo, UErrorCode *pErrorCode) { + if(U_FAILURE(*pErrorCode)) { + return FALSE; + } + // sizeof(UIDNAInfo)=16 in the first API version. + if(pInfo==NULL || pInfo->size<16) { + *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR; + return FALSE; + } + if( (label==NULL ? length!=0 : length<-1) || + (dest==NULL ? capacity!=0 : capacity<0) || + (dest==label && label!=NULL) + ) { + *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR; + return FALSE; + } + // Set all *pInfo bytes to 0 except for the size field itself. + uprv_memset(&pInfo->size+1, 0, pInfo->size-sizeof(pInfo->size)); + return TRUE; +} + +static void +idnaInfoToStruct(IDNAInfo &info, UIDNAInfo *pInfo) { + pInfo->isTransitionalDifferent=info.isTransitionalDifferent(); + pInfo->errors=info.getErrors(); +} + +U_DRAFT int32_t U_EXPORT2 +uidna_labelToASCII(const UIDNA *idna, + const UChar *label, int32_t length, + UChar *dest, int32_t capacity, + UIDNAInfo *pInfo, UErrorCode *pErrorCode) { + if(!checkArgs(label, length, dest, capacity, pInfo, pErrorCode)) { + return 0; + } + UnicodeString src((UBool)(length<0), label, length); + UnicodeString destString(dest, 0, capacity); + IDNAInfo info; + reinterpret_cast(idna)->labelToASCII(src, destString, info, *pErrorCode); + idnaInfoToStruct(info, pInfo); + return destString.extract(dest, capacity, *pErrorCode); +} + +U_DRAFT int32_t U_EXPORT2 +uidna_labelToUnicode(const UIDNA *idna, + const UChar *label, int32_t length, + UChar *dest, int32_t capacity, + UIDNAInfo *pInfo, UErrorCode *pErrorCode) { + if(!checkArgs(label, length, dest, capacity, pInfo, pErrorCode)) { + return 0; + } + UnicodeString src((UBool)(length<0), label, length); + UnicodeString destString(dest, 0, capacity); + IDNAInfo info; + reinterpret_cast(idna)->labelToUnicode(src, destString, info, *pErrorCode); + idnaInfoToStruct(info, pInfo); + return destString.extract(dest, capacity, *pErrorCode); +} + +U_DRAFT int32_t U_EXPORT2 +uidna_nameToASCII(const UIDNA *idna, + const UChar *name, int32_t length, + UChar *dest, int32_t capacity, + UIDNAInfo *pInfo, UErrorCode *pErrorCode) { + if(!checkArgs(name, length, dest, capacity, pInfo, pErrorCode)) { + return 0; + } + UnicodeString src((UBool)(length<0), name, length); + UnicodeString destString(dest, 0, capacity); + IDNAInfo info; + reinterpret_cast(idna)->nameToASCII(src, destString, info, *pErrorCode); + idnaInfoToStruct(info, pInfo); + return destString.extract(dest, capacity, *pErrorCode); +} + +U_DRAFT int32_t U_EXPORT2 +uidna_nameToUnicode(const UIDNA *idna, + const UChar *name, int32_t length, + UChar *dest, int32_t capacity, + UIDNAInfo *pInfo, UErrorCode *pErrorCode) { + if(!checkArgs(name, length, dest, capacity, pInfo, pErrorCode)) { + return 0; + } + UnicodeString src((UBool)(length<0), name, length); + UnicodeString destString(dest, 0, capacity); + IDNAInfo info; + reinterpret_cast(idna)->nameToUnicode(src, destString, info, *pErrorCode); + idnaInfoToStruct(info, pInfo); + return destString.extract(dest, capacity, *pErrorCode); +} + +U_DRAFT int32_t U_EXPORT2 +uidna_labelToASCII_UTF8(const UIDNA *idna, + const char *label, int32_t length, + char *dest, int32_t capacity, + UIDNAInfo *pInfo, UErrorCode *pErrorCode) { + if(!checkArgs(label, length, dest, capacity, pInfo, pErrorCode)) { + return 0; + } + StringPiece src(label, length<0 ? uprv_strlen(label) : length); + CheckedArrayByteSink sink(dest, capacity); + IDNAInfo info; + reinterpret_cast(idna)->labelToASCII_UTF8(src, sink, info, *pErrorCode); + idnaInfoToStruct(info, pInfo); + return u_terminateChars(dest, capacity, sink.NumberOfBytesAppended(), pErrorCode); +} + +U_DRAFT int32_t U_EXPORT2 +uidna_labelToUnicodeUTF8(const UIDNA *idna, + const char *label, int32_t length, + char *dest, int32_t capacity, + UIDNAInfo *pInfo, UErrorCode *pErrorCode) { + if(!checkArgs(label, length, dest, capacity, pInfo, pErrorCode)) { + return 0; + } + StringPiece src(label, length<0 ? uprv_strlen(label) : length); + CheckedArrayByteSink sink(dest, capacity); + IDNAInfo info; + reinterpret_cast(idna)->labelToUnicodeUTF8(src, sink, info, *pErrorCode); + idnaInfoToStruct(info, pInfo); + return u_terminateChars(dest, capacity, sink.NumberOfBytesAppended(), pErrorCode); +} + +U_DRAFT int32_t U_EXPORT2 +uidna_nameToASCII_UTF8(const UIDNA *idna, + const char *name, int32_t length, + char *dest, int32_t capacity, + UIDNAInfo *pInfo, UErrorCode *pErrorCode) { + if(!checkArgs(name, length, dest, capacity, pInfo, pErrorCode)) { + return 0; + } + StringPiece src(name, length<0 ? uprv_strlen(name) : length); + CheckedArrayByteSink sink(dest, capacity); + IDNAInfo info; + reinterpret_cast(idna)->nameToASCII_UTF8(src, sink, info, *pErrorCode); + idnaInfoToStruct(info, pInfo); + return u_terminateChars(dest, capacity, sink.NumberOfBytesAppended(), pErrorCode); +} + +U_DRAFT int32_t U_EXPORT2 +uidna_nameToUnicodeUTF8(const UIDNA *idna, + const char *name, int32_t length, + char *dest, int32_t capacity, + UIDNAInfo *pInfo, UErrorCode *pErrorCode) { + if(!checkArgs(name, length, dest, capacity, pInfo, pErrorCode)) { + return 0; + } + StringPiece src(name, length<0 ? uprv_strlen(name) : length); + CheckedArrayByteSink sink(dest, capacity); + IDNAInfo info; + reinterpret_cast(idna)->nameToUnicodeUTF8(src, sink, info, *pErrorCode); + idnaInfoToStruct(info, pInfo); + return u_terminateChars(dest, capacity, sink.NumberOfBytesAppended(), pErrorCode); +} + +#endif // UCONFIG_NO_IDNA diff --git a/icu4c/source/data/Makefile.in b/icu4c/source/data/Makefile.in index 5e507fc850..82ec1c55a9 100644 --- a/icu4c/source/data/Makefile.in +++ b/icu4c/source/data/Makefile.in @@ -227,7 +227,7 @@ package390: $(OUTTMPDIR)/icudata390.lst $(PKGDATA_LIST) ./icupkg.inc packagedata # 2005-may-05 Removed Unicode properties files (unorm.icu, uprops.icu, ucase.icu, ubidi.icu) # from data build. See Jitterbug 4497. (makedata.mak revision 1.117) # -DAT_FILES_SHORT=pnames.icu unames.icu cnvalias.icu coll/ucadata.icu coll/invuca.icu nfc.nrm nfkc.nrm nfkc_cf.nrm +DAT_FILES_SHORT=pnames.icu unames.icu cnvalias.icu coll/ucadata.icu coll/invuca.icu nfc.nrm nfkc.nrm nfkc_cf.nrm uts46.nrm DAT_FILES=$(DAT_FILES_SHORT:%=$(BUILDDIR)/%) ## BRK files diff --git a/icu4c/source/data/in/uts46.nrm b/icu4c/source/data/in/uts46.nrm new file mode 100644 index 0000000000..91f7cf4035 Binary files /dev/null and b/icu4c/source/data/in/uts46.nrm differ diff --git a/icu4c/source/data/makedata.mak b/icu4c/source/data/makedata.mak index 0563781c6c..173658b3f0 100644 --- a/icu4c/source/data/makedata.mak +++ b/icu4c/source/data/makedata.mak @@ -586,7 +586,7 @@ icu4j-data-install : copy "$(ICUTMP)\$(ICUPKG).dat" "$(ICUOUT)\$(U_ICUDATA_NAME)$(U_ICUDATA_ENDIAN_SUFFIX).dat" -@erase "$(ICUTMP)\$(ICUPKG).dat" !ELSE -"$(ICU_LIB_TARGET)" : $(COMMON_ICUDATA_DEPENDENCIES) $(CNV_FILES) $(CNV_FILES_SPECIAL) "$(ICUBLD_PKG)\unames.icu" "$(ICUBLD_PKG)\pnames.icu" "$(ICUBLD_PKG)\cnvalias.icu" "$(ICUBLD_PKG)\nfc.nrm" "$(ICUBLD_PKG)\nfkc.nrm" "$(ICUBLD_PKG)\nfkc_cf.nrm" "$(ICUBLD_PKG)\$(ICUCOL)\ucadata.icu" "$(ICUBLD_PKG)\$(ICUCOL)\invuca.icu" $(CURR_RES_FILES) $(LANG_RES_FILES) $(REGION_RES_FILES) $(ZONE_RES_FILES) $(BRK_FILES) $(BRK_CTD_FILES) $(BRK_RES_FILES) $(COL_COL_FILES) $(RBNF_RES_FILES) $(TRANSLIT_RES_FILES) $(ALL_RES) $(SPREP_FILES) "$(ICUBLD_PKG)\confusables.cfu" +"$(ICU_LIB_TARGET)" : $(COMMON_ICUDATA_DEPENDENCIES) $(CNV_FILES) $(CNV_FILES_SPECIAL) "$(ICUBLD_PKG)\unames.icu" "$(ICUBLD_PKG)\pnames.icu" "$(ICUBLD_PKG)\cnvalias.icu" "$(ICUBLD_PKG)\nfc.nrm" "$(ICUBLD_PKG)\nfkc.nrm" "$(ICUBLD_PKG)\nfkc_cf.nrm" "$(ICUBLD_PKG)\uts46.nrm" "$(ICUBLD_PKG)\$(ICUCOL)\ucadata.icu" "$(ICUBLD_PKG)\$(ICUCOL)\invuca.icu" $(CURR_RES_FILES) $(LANG_RES_FILES) $(REGION_RES_FILES) $(ZONE_RES_FILES) $(BRK_FILES) $(BRK_CTD_FILES) $(BRK_RES_FILES) $(COL_COL_FILES) $(RBNF_RES_FILES) $(TRANSLIT_RES_FILES) $(ALL_RES) $(SPREP_FILES) "$(ICUBLD_PKG)\confusables.cfu" @echo Building icu data cd "$(ICUBLD_PKG)" "$(ICUPBIN)\pkgdata" $(COMMON_ICUDATA_ARGUMENTS) <<"$(ICUTMP)\icudata.lst" @@ -599,6 +599,7 @@ cnvalias.icu nfc.nrm nfkc.nrm nfkc_cf.nrm +uts46.nrm $(CNV_FILES:.cnv =.cnv ) $(CNV_FILES_SPECIAL:.cnv =.cnv @@ -945,6 +946,9 @@ res_index:table(nofallback) { "$(ICUBLD_PKG)\nfkc_cf.nrm": $(ICUSRCDATA_RELATIVE_PATH)\in\nfkc_cf.nrm "$(ICUPBIN)\icupkg" -tl $? $@ +"$(ICUBLD_PKG)\uts46.nrm": $(ICUSRCDATA_RELATIVE_PATH)\in\uts46.nrm + "$(ICUPBIN)\icupkg" -tl $? $@ + "$(ICUBLD_PKG)\coll\invuca.icu": $(ICUSRCDATA_RELATIVE_PATH)\in\coll\invuca.icu "$(ICUPBIN)\icupkg" -tl $? $@ diff --git a/icu4c/source/data/unidata/norm2/uts46.txt b/icu4c/source/data/unidata/norm2/uts46.txt new file mode 100644 index 0000000000..6420182a8a --- /dev/null +++ b/icu4c/source/data/unidata/norm2/uts46.txt @@ -0,0 +1,6618 @@ +# Original file: +# IdnaMappingTable-5.2.0.txt- DRAFT +# Date: 2010-03-31 20:48:03 GMT [MD] +# +# Unicode IDNA Compatible Preprocessing (UTS #46) +# Copyright (c) 1991-2009 Unicode, Inc. +# For terms of use, see http://www.unicode.org/terms_of_use.html +# For documentation, see http://www.unicode.org/reports/tr46/ + +# ================================================ +# This file has been reformatted into syntax for the +# gennorm2 Normalizer2 data generator tool. +# Reformatting via regular expressions: +# s/; disallowed />FFFD/ +# s/; ignored />/ +# s/^([^;]+) ; valid/# \1valid/ +# s/; mapped ; />/ +# s/^([^;]+) ; deviation/# \1deviation/ +# s/ +(\# [^\#]+)$/ \1/ +# +# Except: Disallowed ASCII characters are passed through; +# they are handled in code. +# Deviation characters are also handled in code. +# +# A circular mapping FFFD>FFFD is avoided by rewriting the line that contains +# ..FFFD to contain ..FFFC instead. +# +# Use this file as the second gennorm2 input file after nfc.txt. +# ================================================ + +# 0000..002C (allow ASCII) # ..COMMA +# 002D..002E valid # HYPHEN-MINUS..FULL STOP +# 002F (allow ASCII) # SOLIDUS +# 0030..0039 valid # DIGIT ZERO..DIGIT NINE +# 003A..0040 (allow ASCII) # COLON..COMMERCIAL AT +0041 >0061 # LATIN CAPITAL LETTER A +0042 >0062 # LATIN CAPITAL LETTER B +0043 >0063 # LATIN CAPITAL LETTER C +0044 >0064 # LATIN CAPITAL LETTER D +0045 >0065 # LATIN CAPITAL LETTER E +0046 >0066 # LATIN CAPITAL LETTER F +0047 >0067 # LATIN CAPITAL LETTER G +0048 >0068 # LATIN CAPITAL LETTER H +0049 >0069 # LATIN CAPITAL LETTER I +004A >006A # LATIN CAPITAL LETTER J +004B >006B # LATIN CAPITAL LETTER K +004C >006C # LATIN CAPITAL LETTER L +004D >006D # LATIN CAPITAL LETTER M +004E >006E # LATIN CAPITAL LETTER N +004F >006F # LATIN CAPITAL LETTER O +0050 >0070 # LATIN CAPITAL LETTER P +0051 >0071 # LATIN CAPITAL LETTER Q +0052 >0072 # LATIN CAPITAL LETTER R +0053 >0073 # LATIN CAPITAL LETTER S +0054 >0074 # LATIN CAPITAL LETTER T +0055 >0075 # LATIN CAPITAL LETTER U +0056 >0076 # LATIN CAPITAL LETTER V +0057 >0077 # LATIN CAPITAL LETTER W +0058 >0078 # LATIN CAPITAL LETTER X +0059 >0079 # LATIN CAPITAL LETTER Y +005A >007A # LATIN CAPITAL LETTER Z +# 005B..0060 (allow ASCII) # LEFT SQUARE BRACKET..GRAVE ACCENT +# 0061..007A valid # LATIN SMALL LETTER A..LATIN SMALL LETTER Z +0080..00A0 >FFFD # (allow ASCII) LEFT CURLY BRACKET..NO-BREAK SPACE +# 00A1..00A7 valid # INVERTED EXCLAMATION MARK..SECTION SIGN +00A8 >FFFD # DIAERESIS +# 00A9 valid # COPYRIGHT SIGN +00AA >0061 # FEMININE ORDINAL INDICATOR +# 00AB..00AC valid # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK..NOT SIGN +00AD > # SOFT HYPHEN +# 00AE valid # REGISTERED SIGN +00AF >FFFD # MACRON +# 00B0..00B1 valid # DEGREE SIGN..PLUS-MINUS SIGN +00B2 >0032 # SUPERSCRIPT TWO +00B3 >0033 # SUPERSCRIPT THREE +00B4 >FFFD # ACUTE ACCENT +00B5 >03BC # MICRO SIGN +# 00B6..00B7 valid # PILCROW SIGN..MIDDLE DOT +00B8 >FFFD # CEDILLA +00B9 >0031 # SUPERSCRIPT ONE +00BA >006F # MASCULINE ORDINAL INDICATOR +# 00BB valid # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK +00BC >0031 2044 0034 # VULGAR FRACTION ONE QUARTER +00BD >0031 2044 0032 # VULGAR FRACTION ONE HALF +00BE >0033 2044 0034 # VULGAR FRACTION THREE QUARTERS +# 00BF valid # INVERTED QUESTION MARK +00C0 >00E0 # LATIN CAPITAL LETTER A WITH GRAVE +00C1 >00E1 # LATIN CAPITAL LETTER A WITH ACUTE +00C2 >00E2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX +00C3 >00E3 # LATIN CAPITAL LETTER A WITH TILDE +00C4 >00E4 # LATIN CAPITAL LETTER A WITH DIAERESIS +00C5 >00E5 # LATIN CAPITAL LETTER A WITH RING ABOVE +00C6 >00E6 # LATIN CAPITAL LETTER AE +00C7 >00E7 # LATIN CAPITAL LETTER C WITH CEDILLA +00C8 >00E8 # LATIN CAPITAL LETTER E WITH GRAVE +00C9 >00E9 # LATIN CAPITAL LETTER E WITH ACUTE +00CA >00EA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX +00CB >00EB # LATIN CAPITAL LETTER E WITH DIAERESIS +00CC >00EC # LATIN CAPITAL LETTER I WITH GRAVE +00CD >00ED # LATIN CAPITAL LETTER I WITH ACUTE +00CE >00EE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX +00CF >00EF # LATIN CAPITAL LETTER I WITH DIAERESIS +00D0 >00F0 # LATIN CAPITAL LETTER ETH +00D1 >00F1 # LATIN CAPITAL LETTER N WITH TILDE +00D2 >00F2 # LATIN CAPITAL LETTER O WITH GRAVE +00D3 >00F3 # LATIN CAPITAL LETTER O WITH ACUTE +00D4 >00F4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX +00D5 >00F5 # LATIN CAPITAL LETTER O WITH TILDE +00D6 >00F6 # LATIN CAPITAL LETTER O WITH DIAERESIS +# 00D7 valid # MULTIPLICATION SIGN +00D8 >00F8 # LATIN CAPITAL LETTER O WITH STROKE +00D9 >00F9 # LATIN CAPITAL LETTER U WITH GRAVE +00DA >00FA # LATIN CAPITAL LETTER U WITH ACUTE +00DB >00FB # LATIN CAPITAL LETTER U WITH CIRCUMFLEX +00DC >00FC # LATIN CAPITAL LETTER U WITH DIAERESIS +00DD >00FD # LATIN CAPITAL LETTER Y WITH ACUTE +00DE >00FE # LATIN CAPITAL LETTER THORN +# 00DF deviation ; 0073 0073 # LATIN SMALL LETTER SHARP S +# 00E0..00FF valid # LATIN SMALL LETTER A WITH GRAVE..LATIN SMALL LETTER Y WITH DIAERESIS +0100 >0101 # LATIN CAPITAL LETTER A WITH MACRON +# 0101 valid # LATIN SMALL LETTER A WITH MACRON +0102 >0103 # LATIN CAPITAL LETTER A WITH BREVE +# 0103 valid # LATIN SMALL LETTER A WITH BREVE +0104 >0105 # LATIN CAPITAL LETTER A WITH OGONEK +# 0105 valid # LATIN SMALL LETTER A WITH OGONEK +0106 >0107 # LATIN CAPITAL LETTER C WITH ACUTE +# 0107 valid # LATIN SMALL LETTER C WITH ACUTE +0108 >0109 # LATIN CAPITAL LETTER C WITH CIRCUMFLEX +# 0109 valid # LATIN SMALL LETTER C WITH CIRCUMFLEX +010A >010B # LATIN CAPITAL LETTER C WITH DOT ABOVE +# 010B valid # LATIN SMALL LETTER C WITH DOT ABOVE +010C >010D # LATIN CAPITAL LETTER C WITH CARON +# 010D valid # LATIN SMALL LETTER C WITH CARON +010E >010F # LATIN CAPITAL LETTER D WITH CARON +# 010F valid # LATIN SMALL LETTER D WITH CARON +0110 >0111 # LATIN CAPITAL LETTER D WITH STROKE +# 0111 valid # LATIN SMALL LETTER D WITH STROKE +0112 >0113 # LATIN CAPITAL LETTER E WITH MACRON +# 0113 valid # LATIN SMALL LETTER E WITH MACRON +0114 >0115 # LATIN CAPITAL LETTER E WITH BREVE +# 0115 valid # LATIN SMALL LETTER E WITH BREVE +0116 >0117 # LATIN CAPITAL LETTER E WITH DOT ABOVE +# 0117 valid # LATIN SMALL LETTER E WITH DOT ABOVE +0118 >0119 # LATIN CAPITAL LETTER E WITH OGONEK +# 0119 valid # LATIN SMALL LETTER E WITH OGONEK +011A >011B # LATIN CAPITAL LETTER E WITH CARON +# 011B valid # LATIN SMALL LETTER E WITH CARON +011C >011D # LATIN CAPITAL LETTER G WITH CIRCUMFLEX +# 011D valid # LATIN SMALL LETTER G WITH CIRCUMFLEX +011E >011F # LATIN CAPITAL LETTER G WITH BREVE +# 011F valid # LATIN SMALL LETTER G WITH BREVE +0120 >0121 # LATIN CAPITAL LETTER G WITH DOT ABOVE +# 0121 valid # LATIN SMALL LETTER G WITH DOT ABOVE +0122 >0123 # LATIN CAPITAL LETTER G WITH CEDILLA +# 0123 valid # LATIN SMALL LETTER G WITH CEDILLA +0124 >0125 # LATIN CAPITAL LETTER H WITH CIRCUMFLEX +# 0125 valid # LATIN SMALL LETTER H WITH CIRCUMFLEX +0126 >0127 # LATIN CAPITAL LETTER H WITH STROKE +# 0127 valid # LATIN SMALL LETTER H WITH STROKE +0128 >0129 # LATIN CAPITAL LETTER I WITH TILDE +# 0129 valid # LATIN SMALL LETTER I WITH TILDE +012A >012B # LATIN CAPITAL LETTER I WITH MACRON +# 012B valid # LATIN SMALL LETTER I WITH MACRON +012C >012D # LATIN CAPITAL LETTER I WITH BREVE +# 012D valid # LATIN SMALL LETTER I WITH BREVE +012E >012F # LATIN CAPITAL LETTER I WITH OGONEK +# 012F valid # LATIN SMALL LETTER I WITH OGONEK +0130 >0069 0307 # LATIN CAPITAL LETTER I WITH DOT ABOVE +# 0131 valid # LATIN SMALL LETTER DOTLESS I +0132..0133 >0069 006A # LATIN CAPITAL LIGATURE IJ..LATIN SMALL LIGATURE IJ +0134 >0135 # LATIN CAPITAL LETTER J WITH CIRCUMFLEX +# 0135 valid # LATIN SMALL LETTER J WITH CIRCUMFLEX +0136 >0137 # LATIN CAPITAL LETTER K WITH CEDILLA +# 0137..0138 valid # LATIN SMALL LETTER K WITH CEDILLA..LATIN SMALL LETTER KRA +0139 >013A # LATIN CAPITAL LETTER L WITH ACUTE +# 013A valid # LATIN SMALL LETTER L WITH ACUTE +013B >013C # LATIN CAPITAL LETTER L WITH CEDILLA +# 013C valid # LATIN SMALL LETTER L WITH CEDILLA +013D >013E # LATIN CAPITAL LETTER L WITH CARON +# 013E valid # LATIN SMALL LETTER L WITH CARON +013F..0140 >006C 00B7 # LATIN CAPITAL LETTER L WITH MIDDLE DOT..LATIN SMALL LETTER L WITH MIDDLE DOT +0141 >0142 # LATIN CAPITAL LETTER L WITH STROKE +# 0142 valid # LATIN SMALL LETTER L WITH STROKE +0143 >0144 # LATIN CAPITAL LETTER N WITH ACUTE +# 0144 valid # LATIN SMALL LETTER N WITH ACUTE +0145 >0146 # LATIN CAPITAL LETTER N WITH CEDILLA +# 0146 valid # LATIN SMALL LETTER N WITH CEDILLA +0147 >0148 # LATIN CAPITAL LETTER N WITH CARON +# 0148 valid # LATIN SMALL LETTER N WITH CARON +0149 >02BC 006E # LATIN SMALL LETTER N PRECEDED BY APOSTROPHE +014A >014B # LATIN CAPITAL LETTER ENG +# 014B valid # LATIN SMALL LETTER ENG +014C >014D # LATIN CAPITAL LETTER O WITH MACRON +# 014D valid # LATIN SMALL LETTER O WITH MACRON +014E >014F # LATIN CAPITAL LETTER O WITH BREVE +# 014F valid # LATIN SMALL LETTER O WITH BREVE +0150 >0151 # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE +# 0151 valid # LATIN SMALL LETTER O WITH DOUBLE ACUTE +0152 >0153 # LATIN CAPITAL LIGATURE OE +# 0153 valid # LATIN SMALL LIGATURE OE +0154 >0155 # LATIN CAPITAL LETTER R WITH ACUTE +# 0155 valid # LATIN SMALL LETTER R WITH ACUTE +0156 >0157 # LATIN CAPITAL LETTER R WITH CEDILLA +# 0157 valid # LATIN SMALL LETTER R WITH CEDILLA +0158 >0159 # LATIN CAPITAL LETTER R WITH CARON +# 0159 valid # LATIN SMALL LETTER R WITH CARON +015A >015B # LATIN CAPITAL LETTER S WITH ACUTE +# 015B valid # LATIN SMALL LETTER S WITH ACUTE +015C >015D # LATIN CAPITAL LETTER S WITH CIRCUMFLEX +# 015D valid # LATIN SMALL LETTER S WITH CIRCUMFLEX +015E >015F # LATIN CAPITAL LETTER S WITH CEDILLA +# 015F valid # LATIN SMALL LETTER S WITH CEDILLA +0160 >0161 # LATIN CAPITAL LETTER S WITH CARON +# 0161 valid # LATIN SMALL LETTER S WITH CARON +0162 >0163 # LATIN CAPITAL LETTER T WITH CEDILLA +# 0163 valid # LATIN SMALL LETTER T WITH CEDILLA +0164 >0165 # LATIN CAPITAL LETTER T WITH CARON +# 0165 valid # LATIN SMALL LETTER T WITH CARON +0166 >0167 # LATIN CAPITAL LETTER T WITH STROKE +# 0167 valid # LATIN SMALL LETTER T WITH STROKE +0168 >0169 # LATIN CAPITAL LETTER U WITH TILDE +# 0169 valid # LATIN SMALL LETTER U WITH TILDE +016A >016B # LATIN CAPITAL LETTER U WITH MACRON +# 016B valid # LATIN SMALL LETTER U WITH MACRON +016C >016D # LATIN CAPITAL LETTER U WITH BREVE +# 016D valid # LATIN SMALL LETTER U WITH BREVE +016E >016F # LATIN CAPITAL LETTER U WITH RING ABOVE +# 016F valid # LATIN SMALL LETTER U WITH RING ABOVE +0170 >0171 # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE +# 0171 valid # LATIN SMALL LETTER U WITH DOUBLE ACUTE +0172 >0173 # LATIN CAPITAL LETTER U WITH OGONEK +# 0173 valid # LATIN SMALL LETTER U WITH OGONEK +0174 >0175 # LATIN CAPITAL LETTER W WITH CIRCUMFLEX +# 0175 valid # LATIN SMALL LETTER W WITH CIRCUMFLEX +0176 >0177 # LATIN CAPITAL LETTER Y WITH CIRCUMFLEX +# 0177 valid # LATIN SMALL LETTER Y WITH CIRCUMFLEX +0178 >00FF # LATIN CAPITAL LETTER Y WITH DIAERESIS +0179 >017A # LATIN CAPITAL LETTER Z WITH ACUTE +# 017A valid # LATIN SMALL LETTER Z WITH ACUTE +017B >017C # LATIN CAPITAL LETTER Z WITH DOT ABOVE +# 017C valid # LATIN SMALL LETTER Z WITH DOT ABOVE +017D >017E # LATIN CAPITAL LETTER Z WITH CARON +# 017E valid # LATIN SMALL LETTER Z WITH CARON +017F >0073 # LATIN SMALL LETTER LONG S +# 0180 valid # LATIN SMALL LETTER B WITH STROKE +0181 >0253 # LATIN CAPITAL LETTER B WITH HOOK +0182 >0183 # LATIN CAPITAL LETTER B WITH TOPBAR +# 0183 valid # LATIN SMALL LETTER B WITH TOPBAR +0184 >0185 # LATIN CAPITAL LETTER TONE SIX +# 0185 valid # LATIN SMALL LETTER TONE SIX +0186 >0254 # LATIN CAPITAL LETTER OPEN O +0187 >0188 # LATIN CAPITAL LETTER C WITH HOOK +# 0188 valid # LATIN SMALL LETTER C WITH HOOK +0189 >0256 # LATIN CAPITAL LETTER AFRICAN D +018A >0257 # LATIN CAPITAL LETTER D WITH HOOK +018B >018C # LATIN CAPITAL LETTER D WITH TOPBAR +# 018C..018D valid # LATIN SMALL LETTER D WITH TOPBAR..LATIN SMALL LETTER TURNED DELTA +018E >01DD # LATIN CAPITAL LETTER REVERSED E +018F >0259 # LATIN CAPITAL LETTER SCHWA +0190 >025B # LATIN CAPITAL LETTER OPEN E +0191 >0192 # LATIN CAPITAL LETTER F WITH HOOK +# 0192 valid # LATIN SMALL LETTER F WITH HOOK +0193 >0260 # LATIN CAPITAL LETTER G WITH HOOK +0194 >0263 # LATIN CAPITAL LETTER GAMMA +# 0195 valid # LATIN SMALL LETTER HV +0196 >0269 # LATIN CAPITAL LETTER IOTA +0197 >0268 # LATIN CAPITAL LETTER I WITH STROKE +0198 >0199 # LATIN CAPITAL LETTER K WITH HOOK +# 0199..019B valid # LATIN SMALL LETTER K WITH HOOK..LATIN SMALL LETTER LAMBDA WITH STROKE +019C >026F # LATIN CAPITAL LETTER TURNED M +019D >0272 # LATIN CAPITAL LETTER N WITH LEFT HOOK +# 019E valid # LATIN SMALL LETTER N WITH LONG RIGHT LEG +019F >0275 # LATIN CAPITAL LETTER O WITH MIDDLE TILDE +01A0 >01A1 # LATIN CAPITAL LETTER O WITH HORN +# 01A1 valid # LATIN SMALL LETTER O WITH HORN +01A2 >01A3 # LATIN CAPITAL LETTER OI +# 01A3 valid # LATIN SMALL LETTER OI +01A4 >01A5 # LATIN CAPITAL LETTER P WITH HOOK +# 01A5 valid # LATIN SMALL LETTER P WITH HOOK +01A6 >0280 # LATIN LETTER YR +01A7 >01A8 # LATIN CAPITAL LETTER TONE TWO +# 01A8 valid # LATIN SMALL LETTER TONE TWO +01A9 >0283 # LATIN CAPITAL LETTER ESH +# 01AA..01AB valid # LATIN LETTER REVERSED ESH LOOP..LATIN SMALL LETTER T WITH PALATAL HOOK +01AC >01AD # LATIN CAPITAL LETTER T WITH HOOK +# 01AD valid # LATIN SMALL LETTER T WITH HOOK +01AE >0288 # LATIN CAPITAL LETTER T WITH RETROFLEX HOOK +01AF >01B0 # LATIN CAPITAL LETTER U WITH HORN +# 01B0 valid # LATIN SMALL LETTER U WITH HORN +01B1 >028A # LATIN CAPITAL LETTER UPSILON +01B2 >028B # LATIN CAPITAL LETTER V WITH HOOK +01B3 >01B4 # LATIN CAPITAL LETTER Y WITH HOOK +# 01B4 valid # LATIN SMALL LETTER Y WITH HOOK +01B5 >01B6 # LATIN CAPITAL LETTER Z WITH STROKE +# 01B6 valid # LATIN SMALL LETTER Z WITH STROKE +01B7 >0292 # LATIN CAPITAL LETTER EZH +01B8 >01B9 # LATIN CAPITAL LETTER EZH REVERSED +# 01B9..01BB valid # LATIN SMALL LETTER EZH REVERSED..LATIN LETTER TWO WITH STROKE +01BC >01BD # LATIN CAPITAL LETTER TONE FIVE +# 01BD..01C3 valid # LATIN SMALL LETTER TONE FIVE..LATIN LETTER RETROFLEX CLICK +01C4..01C6 >0064 017E # LATIN CAPITAL LETTER DZ WITH CARON..LATIN SMALL LETTER DZ WITH CARON +01C7..01C9 >006C 006A # LATIN CAPITAL LETTER LJ..LATIN SMALL LETTER LJ +01CA..01CC >006E 006A # LATIN CAPITAL LETTER NJ..LATIN SMALL LETTER NJ +01CD >01CE # LATIN CAPITAL LETTER A WITH CARON +# 01CE valid # LATIN SMALL LETTER A WITH CARON +01CF >01D0 # LATIN CAPITAL LETTER I WITH CARON +# 01D0 valid # LATIN SMALL LETTER I WITH CARON +01D1 >01D2 # LATIN CAPITAL LETTER O WITH CARON +# 01D2 valid # LATIN SMALL LETTER O WITH CARON +01D3 >01D4 # LATIN CAPITAL LETTER U WITH CARON +# 01D4 valid # LATIN SMALL LETTER U WITH CARON +01D5 >01D6 # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON +# 01D6 valid # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON +01D7 >01D8 # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE +# 01D8 valid # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE +01D9 >01DA # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON +# 01DA valid # LATIN SMALL LETTER U WITH DIAERESIS AND CARON +01DB >01DC # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE +# 01DC..01DD valid # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE..LATIN SMALL LETTER TURNED E +01DE >01DF # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON +# 01DF valid # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON +01E0 >01E1 # LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON +# 01E1 valid # LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON +01E2 >01E3 # LATIN CAPITAL LETTER AE WITH MACRON +# 01E3 valid # LATIN SMALL LETTER AE WITH MACRON +01E4 >01E5 # LATIN CAPITAL LETTER G WITH STROKE +# 01E5 valid # LATIN SMALL LETTER G WITH STROKE +01E6 >01E7 # LATIN CAPITAL LETTER G WITH CARON +# 01E7 valid # LATIN SMALL LETTER G WITH CARON +01E8 >01E9 # LATIN CAPITAL LETTER K WITH CARON +# 01E9 valid # LATIN SMALL LETTER K WITH CARON +01EA >01EB # LATIN CAPITAL LETTER O WITH OGONEK +# 01EB valid # LATIN SMALL LETTER O WITH OGONEK +01EC >01ED # LATIN CAPITAL LETTER O WITH OGONEK AND MACRON +# 01ED valid # LATIN SMALL LETTER O WITH OGONEK AND MACRON +01EE >01EF # LATIN CAPITAL LETTER EZH WITH CARON +# 01EF..01F0 valid # LATIN SMALL LETTER EZH WITH CARON..LATIN SMALL LETTER J WITH CARON +01F1..01F3 >0064 007A # LATIN CAPITAL LETTER DZ..LATIN SMALL LETTER DZ +01F4 >01F5 # LATIN CAPITAL LETTER G WITH ACUTE +# 01F5 valid # LATIN SMALL LETTER G WITH ACUTE +01F6 >0195 # LATIN CAPITAL LETTER HWAIR +01F7 >01BF # LATIN CAPITAL LETTER WYNN +01F8 >01F9 # LATIN CAPITAL LETTER N WITH GRAVE +# 01F9 valid # LATIN SMALL LETTER N WITH GRAVE +01FA >01FB # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE +# 01FB valid # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE +01FC >01FD # LATIN CAPITAL LETTER AE WITH ACUTE +# 01FD valid # LATIN SMALL LETTER AE WITH ACUTE +01FE >01FF # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE +# 01FF valid # LATIN SMALL LETTER O WITH STROKE AND ACUTE +0200 >0201 # LATIN CAPITAL LETTER A WITH DOUBLE GRAVE +# 0201 valid # LATIN SMALL LETTER A WITH DOUBLE GRAVE +0202 >0203 # LATIN CAPITAL LETTER A WITH INVERTED BREVE +# 0203 valid # LATIN SMALL LETTER A WITH INVERTED BREVE +0204 >0205 # LATIN CAPITAL LETTER E WITH DOUBLE GRAVE +# 0205 valid # LATIN SMALL LETTER E WITH DOUBLE GRAVE +0206 >0207 # LATIN CAPITAL LETTER E WITH INVERTED BREVE +# 0207 valid # LATIN SMALL LETTER E WITH INVERTED BREVE +0208 >0209 # LATIN CAPITAL LETTER I WITH DOUBLE GRAVE +# 0209 valid # LATIN SMALL LETTER I WITH DOUBLE GRAVE +020A >020B # LATIN CAPITAL LETTER I WITH INVERTED BREVE +# 020B valid # LATIN SMALL LETTER I WITH INVERTED BREVE +020C >020D # LATIN CAPITAL LETTER O WITH DOUBLE GRAVE +# 020D valid # LATIN SMALL LETTER O WITH DOUBLE GRAVE +020E >020F # LATIN CAPITAL LETTER O WITH INVERTED BREVE +# 020F valid # LATIN SMALL LETTER O WITH INVERTED BREVE +0210 >0211 # LATIN CAPITAL LETTER R WITH DOUBLE GRAVE +# 0211 valid # LATIN SMALL LETTER R WITH DOUBLE GRAVE +0212 >0213 # LATIN CAPITAL LETTER R WITH INVERTED BREVE +# 0213 valid # LATIN SMALL LETTER R WITH INVERTED BREVE +0214 >0215 # LATIN CAPITAL LETTER U WITH DOUBLE GRAVE +# 0215 valid # LATIN SMALL LETTER U WITH DOUBLE GRAVE +0216 >0217 # LATIN CAPITAL LETTER U WITH INVERTED BREVE +# 0217 valid # LATIN SMALL LETTER U WITH INVERTED BREVE +0218 >0219 # LATIN CAPITAL LETTER S WITH COMMA BELOW +# 0219 valid # LATIN SMALL LETTER S WITH COMMA BELOW +021A >021B # LATIN CAPITAL LETTER T WITH COMMA BELOW +# 021B valid # LATIN SMALL LETTER T WITH COMMA BELOW +021C >021D # LATIN CAPITAL LETTER YOGH +# 021D valid # LATIN SMALL LETTER YOGH +021E >021F # LATIN CAPITAL LETTER H WITH CARON +# 021F valid # LATIN SMALL LETTER H WITH CARON +0220 >019E # LATIN CAPITAL LETTER N WITH LONG RIGHT LEG +# 0221 valid # LATIN SMALL LETTER D WITH CURL +0222 >0223 # LATIN CAPITAL LETTER OU +# 0223 valid # LATIN SMALL LETTER OU +0224 >0225 # LATIN CAPITAL LETTER Z WITH HOOK +# 0225 valid # LATIN SMALL LETTER Z WITH HOOK +0226 >0227 # LATIN CAPITAL LETTER A WITH DOT ABOVE +# 0227 valid # LATIN SMALL LETTER A WITH DOT ABOVE +0228 >0229 # LATIN CAPITAL LETTER E WITH CEDILLA +# 0229 valid # LATIN SMALL LETTER E WITH CEDILLA +022A >022B # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON +# 022B valid # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON +022C >022D # LATIN CAPITAL LETTER O WITH TILDE AND MACRON +# 022D valid # LATIN SMALL LETTER O WITH TILDE AND MACRON +022E >022F # LATIN CAPITAL LETTER O WITH DOT ABOVE +# 022F valid # LATIN SMALL LETTER O WITH DOT ABOVE +0230 >0231 # LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON +# 0231 valid # LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON +0232 >0233 # LATIN CAPITAL LETTER Y WITH MACRON +# 0233..0239 valid # LATIN SMALL LETTER Y WITH MACRON..LATIN SMALL LETTER QP DIGRAPH +023A >2C65 # LATIN CAPITAL LETTER A WITH STROKE +023B >023C # LATIN CAPITAL LETTER C WITH STROKE +# 023C valid # LATIN SMALL LETTER C WITH STROKE +023D >019A # LATIN CAPITAL LETTER L WITH BAR +023E >2C66 # LATIN CAPITAL LETTER T WITH DIAGONAL STROKE +# 023F..0240 valid # LATIN SMALL LETTER S WITH SWASH TAIL..LATIN SMALL LETTER Z WITH SWASH TAIL +0241 >0242 # LATIN CAPITAL LETTER GLOTTAL STOP +# 0242 valid # LATIN SMALL LETTER GLOTTAL STOP +0243 >0180 # LATIN CAPITAL LETTER B WITH STROKE +0244 >0289 # LATIN CAPITAL LETTER U BAR +0245 >028C # LATIN CAPITAL LETTER TURNED V +0246 >0247 # LATIN CAPITAL LETTER E WITH STROKE +# 0247 valid # LATIN SMALL LETTER E WITH STROKE +0248 >0249 # LATIN CAPITAL LETTER J WITH STROKE +# 0249 valid # LATIN SMALL LETTER J WITH STROKE +024A >024B # LATIN CAPITAL LETTER SMALL Q WITH HOOK TAIL +# 024B valid # LATIN SMALL LETTER Q WITH HOOK TAIL +024C >024D # LATIN CAPITAL LETTER R WITH STROKE +# 024D valid # LATIN SMALL LETTER R WITH STROKE +024E >024F # LATIN CAPITAL LETTER Y WITH STROKE +# 024F..02AF valid # LATIN SMALL LETTER Y WITH STROKE..LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL +02B0 >0068 # MODIFIER LETTER SMALL H +02B1 >0266 # MODIFIER LETTER SMALL H WITH HOOK +02B2 >006A # MODIFIER LETTER SMALL J +02B3 >0072 # MODIFIER LETTER SMALL R +02B4 >0279 # MODIFIER LETTER SMALL TURNED R +02B5 >027B # MODIFIER LETTER SMALL TURNED R WITH HOOK +02B6 >0281 # MODIFIER LETTER SMALL CAPITAL INVERTED R +02B7 >0077 # MODIFIER LETTER SMALL W +02B8 >0079 # MODIFIER LETTER SMALL Y +# 02B9..02D7 valid # MODIFIER LETTER PRIME..MODIFIER LETTER MINUS SIGN +02D8..02DD >FFFD # BREVE..DOUBLE ACUTE ACCENT +# 02DE..02DF valid # MODIFIER LETTER RHOTIC HOOK..MODIFIER LETTER CROSS ACCENT +02E0 >0263 # MODIFIER LETTER SMALL GAMMA +02E1 >006C # MODIFIER LETTER SMALL L +02E2 >0073 # MODIFIER LETTER SMALL S +02E3 >0078 # MODIFIER LETTER SMALL X +02E4 >0295 # MODIFIER LETTER SMALL REVERSED GLOTTAL STOP +# 02E5..033F valid # MODIFIER LETTER EXTRA-HIGH TONE BAR..COMBINING DOUBLE OVERLINE +0340 >0300 # COMBINING GRAVE TONE MARK +0341 >0301 # COMBINING ACUTE TONE MARK +# 0342 valid # COMBINING GREEK PERISPOMENI +0343 >0313 # COMBINING GREEK KORONIS +0344 >0308 0301 # COMBINING GREEK DIALYTIKA TONOS +0345 >03B9 # COMBINING GREEK YPOGEGRAMMENI +# 0346..034E valid # COMBINING BRIDGE ABOVE..COMBINING UPWARDS ARROW BELOW +034F > # COMBINING GRAPHEME JOINER +# 0350..036F valid # COMBINING RIGHT ARROWHEAD ABOVE..COMBINING LATIN SMALL LETTER X +0370 >0371 # GREEK CAPITAL LETTER HETA +# 0371 valid # GREEK SMALL LETTER HETA +0372 >0373 # GREEK CAPITAL LETTER ARCHAIC SAMPI +# 0373 valid # GREEK SMALL LETTER ARCHAIC SAMPI +0374 >02B9 # GREEK NUMERAL SIGN +# 0375 valid # GREEK LOWER NUMERAL SIGN +0376 >0377 # GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA +# 0377 valid # GREEK SMALL LETTER PAMPHYLIAN DIGAMMA +0378..0379 >FFFD # .. +037A >FFFD # GREEK YPOGEGRAMMENI +# 037B..037D valid # GREEK SMALL REVERSED LUNATE SIGMA SYMBOL..GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL +037E >FFFD # GREEK QUESTION MARK +037F..0383 >FFFD # .. +0384..0385 >FFFD # GREEK TONOS..GREEK DIALYTIKA TONOS +0386 >03AC # GREEK CAPITAL LETTER ALPHA WITH TONOS +0387 >00B7 # GREEK ANO TELEIA +0388 >03AD # GREEK CAPITAL LETTER EPSILON WITH TONOS +0389 >03AE # GREEK CAPITAL LETTER ETA WITH TONOS +038A >03AF # GREEK CAPITAL LETTER IOTA WITH TONOS +038B >FFFD # +038C >03CC # GREEK CAPITAL LETTER OMICRON WITH TONOS +038D >FFFD # +038E >03CD # GREEK CAPITAL LETTER UPSILON WITH TONOS +038F >03CE # GREEK CAPITAL LETTER OMEGA WITH TONOS +# 0390 valid # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS +0391 >03B1 # GREEK CAPITAL LETTER ALPHA +0392 >03B2 # GREEK CAPITAL LETTER BETA +0393 >03B3 # GREEK CAPITAL LETTER GAMMA +0394 >03B4 # GREEK CAPITAL LETTER DELTA +0395 >03B5 # GREEK CAPITAL LETTER EPSILON +0396 >03B6 # GREEK CAPITAL LETTER ZETA +0397 >03B7 # GREEK CAPITAL LETTER ETA +0398 >03B8 # GREEK CAPITAL LETTER THETA +0399 >03B9 # GREEK CAPITAL LETTER IOTA +039A >03BA # GREEK CAPITAL LETTER KAPPA +039B >03BB # GREEK CAPITAL LETTER LAMDA +039C >03BC # GREEK CAPITAL LETTER MU +039D >03BD # GREEK CAPITAL LETTER NU +039E >03BE # GREEK CAPITAL LETTER XI +039F >03BF # GREEK CAPITAL LETTER OMICRON +03A0 >03C0 # GREEK CAPITAL LETTER PI +03A1 >03C1 # GREEK CAPITAL LETTER RHO +03A2 >FFFD # +03A3 >03C3 # GREEK CAPITAL LETTER SIGMA +03A4 >03C4 # GREEK CAPITAL LETTER TAU +03A5 >03C5 # GREEK CAPITAL LETTER UPSILON +03A6 >03C6 # GREEK CAPITAL LETTER PHI +03A7 >03C7 # GREEK CAPITAL LETTER CHI +03A8 >03C8 # GREEK CAPITAL LETTER PSI +03A9 >03C9 # GREEK CAPITAL LETTER OMEGA +03AA >03CA # GREEK CAPITAL LETTER IOTA WITH DIALYTIKA +03AB >03CB # GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA +# 03AC..03C1 valid # GREEK SMALL LETTER ALPHA WITH TONOS..GREEK SMALL LETTER RHO +# 03C2 deviation ; 03C3 # GREEK SMALL LETTER FINAL SIGMA +# 03C3..03CE valid # GREEK SMALL LETTER SIGMA..GREEK SMALL LETTER OMEGA WITH TONOS +03CF >03D7 # GREEK CAPITAL KAI SYMBOL +03D0 >03B2 # GREEK BETA SYMBOL +03D1 >03B8 # GREEK THETA SYMBOL +03D2 >03C5 # GREEK UPSILON WITH HOOK SYMBOL +03D3 >03CD # GREEK UPSILON WITH ACUTE AND HOOK SYMBOL +03D4 >03CB # GREEK UPSILON WITH DIAERESIS AND HOOK SYMBOL +03D5 >03C6 # GREEK PHI SYMBOL +03D6 >03C0 # GREEK PI SYMBOL +# 03D7 valid # GREEK KAI SYMBOL +03D8 >03D9 # GREEK LETTER ARCHAIC KOPPA +# 03D9 valid # GREEK SMALL LETTER ARCHAIC KOPPA +03DA >03DB # GREEK LETTER STIGMA +# 03DB valid # GREEK SMALL LETTER STIGMA +03DC >03DD # GREEK LETTER DIGAMMA +# 03DD valid # GREEK SMALL LETTER DIGAMMA +03DE >03DF # GREEK LETTER KOPPA +# 03DF valid # GREEK SMALL LETTER KOPPA +03E0 >03E1 # GREEK LETTER SAMPI +# 03E1 valid # GREEK SMALL LETTER SAMPI +03E2 >03E3 # COPTIC CAPITAL LETTER SHEI +# 03E3 valid # COPTIC SMALL LETTER SHEI +03E4 >03E5 # COPTIC CAPITAL LETTER FEI +# 03E5 valid # COPTIC SMALL LETTER FEI +03E6 >03E7 # COPTIC CAPITAL LETTER KHEI +# 03E7 valid # COPTIC SMALL LETTER KHEI +03E8 >03E9 # COPTIC CAPITAL LETTER HORI +# 03E9 valid # COPTIC SMALL LETTER HORI +03EA >03EB # COPTIC CAPITAL LETTER GANGIA +# 03EB valid # COPTIC SMALL LETTER GANGIA +03EC >03ED # COPTIC CAPITAL LETTER SHIMA +# 03ED valid # COPTIC SMALL LETTER SHIMA +03EE >03EF # COPTIC CAPITAL LETTER DEI +# 03EF valid # COPTIC SMALL LETTER DEI +03F0 >03BA # GREEK KAPPA SYMBOL +03F1 >03C1 # GREEK RHO SYMBOL +03F2 >03C3 # GREEK LUNATE SIGMA SYMBOL +# 03F3 valid # GREEK LETTER YOT +03F4 >03B8 # GREEK CAPITAL THETA SYMBOL +03F5 >03B5 # GREEK LUNATE EPSILON SYMBOL +# 03F6 valid # GREEK REVERSED LUNATE EPSILON SYMBOL +03F7 >03F8 # GREEK CAPITAL LETTER SHO +# 03F8 valid # GREEK SMALL LETTER SHO +03F9 >03C3 # GREEK CAPITAL LUNATE SIGMA SYMBOL +03FA >03FB # GREEK CAPITAL LETTER SAN +# 03FB..03FC valid # GREEK SMALL LETTER SAN..GREEK RHO WITH STROKE SYMBOL +03FD >037B # GREEK CAPITAL REVERSED LUNATE SIGMA SYMBOL +03FE >037C # GREEK CAPITAL DOTTED LUNATE SIGMA SYMBOL +03FF >037D # GREEK CAPITAL REVERSED DOTTED LUNATE SIGMA SYMBOL +0400 >0450 # CYRILLIC CAPITAL LETTER IE WITH GRAVE +0401 >0451 # CYRILLIC CAPITAL LETTER IO +0402 >0452 # CYRILLIC CAPITAL LETTER DJE +0403 >0453 # CYRILLIC CAPITAL LETTER GJE +0404 >0454 # CYRILLIC CAPITAL LETTER UKRAINIAN IE +0405 >0455 # CYRILLIC CAPITAL LETTER DZE +0406 >0456 # CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I +0407 >0457 # CYRILLIC CAPITAL LETTER YI +0408 >0458 # CYRILLIC CAPITAL LETTER JE +0409 >0459 # CYRILLIC CAPITAL LETTER LJE +040A >045A # CYRILLIC CAPITAL LETTER NJE +040B >045B # CYRILLIC CAPITAL LETTER TSHE +040C >045C # CYRILLIC CAPITAL LETTER KJE +040D >045D # CYRILLIC CAPITAL LETTER I WITH GRAVE +040E >045E # CYRILLIC CAPITAL LETTER SHORT U +040F >045F # CYRILLIC CAPITAL LETTER DZHE +0410 >0430 # CYRILLIC CAPITAL LETTER A +0411 >0431 # CYRILLIC CAPITAL LETTER BE +0412 >0432 # CYRILLIC CAPITAL LETTER VE +0413 >0433 # CYRILLIC CAPITAL LETTER GHE +0414 >0434 # CYRILLIC CAPITAL LETTER DE +0415 >0435 # CYRILLIC CAPITAL LETTER IE +0416 >0436 # CYRILLIC CAPITAL LETTER ZHE +0417 >0437 # CYRILLIC CAPITAL LETTER ZE +0418 >0438 # CYRILLIC CAPITAL LETTER I +0419 >0439 # CYRILLIC CAPITAL LETTER SHORT I +041A >043A # CYRILLIC CAPITAL LETTER KA +041B >043B # CYRILLIC CAPITAL LETTER EL +041C >043C # CYRILLIC CAPITAL LETTER EM +041D >043D # CYRILLIC CAPITAL LETTER EN +041E >043E # CYRILLIC CAPITAL LETTER O +041F >043F # CYRILLIC CAPITAL LETTER PE +0420 >0440 # CYRILLIC CAPITAL LETTER ER +0421 >0441 # CYRILLIC CAPITAL LETTER ES +0422 >0442 # CYRILLIC CAPITAL LETTER TE +0423 >0443 # CYRILLIC CAPITAL LETTER U +0424 >0444 # CYRILLIC CAPITAL LETTER EF +0425 >0445 # CYRILLIC CAPITAL LETTER HA +0426 >0446 # CYRILLIC CAPITAL LETTER TSE +0427 >0447 # CYRILLIC CAPITAL LETTER CHE +0428 >0448 # CYRILLIC CAPITAL LETTER SHA +0429 >0449 # CYRILLIC CAPITAL LETTER SHCHA +042A >044A # CYRILLIC CAPITAL LETTER HARD SIGN +042B >044B # CYRILLIC CAPITAL LETTER YERU +042C >044C # CYRILLIC CAPITAL LETTER SOFT SIGN +042D >044D # CYRILLIC CAPITAL LETTER E +042E >044E # CYRILLIC CAPITAL LETTER YU +042F >044F # CYRILLIC CAPITAL LETTER YA +# 0430..045F valid # CYRILLIC SMALL LETTER A..CYRILLIC SMALL LETTER DZHE +0460 >0461 # CYRILLIC CAPITAL LETTER OMEGA +# 0461 valid # CYRILLIC SMALL LETTER OMEGA +0462 >0463 # CYRILLIC CAPITAL LETTER YAT +# 0463 valid # CYRILLIC SMALL LETTER YAT +0464 >0465 # CYRILLIC CAPITAL LETTER IOTIFIED E +# 0465 valid # CYRILLIC SMALL LETTER IOTIFIED E +0466 >0467 # CYRILLIC CAPITAL LETTER LITTLE YUS +# 0467 valid # CYRILLIC SMALL LETTER LITTLE YUS +0468 >0469 # CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS +# 0469 valid # CYRILLIC SMALL LETTER IOTIFIED LITTLE YUS +046A >046B # CYRILLIC CAPITAL LETTER BIG YUS +# 046B valid # CYRILLIC SMALL LETTER BIG YUS +046C >046D # CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS +# 046D valid # CYRILLIC SMALL LETTER IOTIFIED BIG YUS +046E >046F # CYRILLIC CAPITAL LETTER KSI +# 046F valid # CYRILLIC SMALL LETTER KSI +0470 >0471 # CYRILLIC CAPITAL LETTER PSI +# 0471 valid # CYRILLIC SMALL LETTER PSI +0472 >0473 # CYRILLIC CAPITAL LETTER FITA +# 0473 valid # CYRILLIC SMALL LETTER FITA +0474 >0475 # CYRILLIC CAPITAL LETTER IZHITSA +# 0475 valid # CYRILLIC SMALL LETTER IZHITSA +0476 >0477 # CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT +# 0477 valid # CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT +0478 >0479 # CYRILLIC CAPITAL LETTER UK +# 0479 valid # CYRILLIC SMALL LETTER UK +047A >047B # CYRILLIC CAPITAL LETTER ROUND OMEGA +# 047B valid # CYRILLIC SMALL LETTER ROUND OMEGA +047C >047D # CYRILLIC CAPITAL LETTER OMEGA WITH TITLO +# 047D valid # CYRILLIC SMALL LETTER OMEGA WITH TITLO +047E >047F # CYRILLIC CAPITAL LETTER OT +# 047F valid # CYRILLIC SMALL LETTER OT +0480 >0481 # CYRILLIC CAPITAL LETTER KOPPA +# 0481..0489 valid # CYRILLIC SMALL LETTER KOPPA..COMBINING CYRILLIC MILLIONS SIGN +048A >048B # CYRILLIC CAPITAL LETTER SHORT I WITH TAIL +# 048B valid # CYRILLIC SMALL LETTER SHORT I WITH TAIL +048C >048D # CYRILLIC CAPITAL LETTER SEMISOFT SIGN +# 048D valid # CYRILLIC SMALL LETTER SEMISOFT SIGN +048E >048F # CYRILLIC CAPITAL LETTER ER WITH TICK +# 048F valid # CYRILLIC SMALL LETTER ER WITH TICK +0490 >0491 # CYRILLIC CAPITAL LETTER GHE WITH UPTURN +# 0491 valid # CYRILLIC SMALL LETTER GHE WITH UPTURN +0492 >0493 # CYRILLIC CAPITAL LETTER GHE WITH STROKE +# 0493 valid # CYRILLIC SMALL LETTER GHE WITH STROKE +0494 >0495 # CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK +# 0495 valid # CYRILLIC SMALL LETTER GHE WITH MIDDLE HOOK +0496 >0497 # CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER +# 0497 valid # CYRILLIC SMALL LETTER ZHE WITH DESCENDER +0498 >0499 # CYRILLIC CAPITAL LETTER ZE WITH DESCENDER +# 0499 valid # CYRILLIC SMALL LETTER ZE WITH DESCENDER +049A >049B # CYRILLIC CAPITAL LETTER KA WITH DESCENDER +# 049B valid # CYRILLIC SMALL LETTER KA WITH DESCENDER +049C >049D # CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE +# 049D valid # CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE +049E >049F # CYRILLIC CAPITAL LETTER KA WITH STROKE +# 049F valid # CYRILLIC SMALL LETTER KA WITH STROKE +04A0 >04A1 # CYRILLIC CAPITAL LETTER BASHKIR KA +# 04A1 valid # CYRILLIC SMALL LETTER BASHKIR KA +04A2 >04A3 # CYRILLIC CAPITAL LETTER EN WITH DESCENDER +# 04A3 valid # CYRILLIC SMALL LETTER EN WITH DESCENDER +04A4 >04A5 # CYRILLIC CAPITAL LIGATURE EN GHE +# 04A5 valid # CYRILLIC SMALL LIGATURE EN GHE +04A6 >04A7 # CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK +# 04A7 valid # CYRILLIC SMALL LETTER PE WITH MIDDLE HOOK +04A8 >04A9 # CYRILLIC CAPITAL LETTER ABKHASIAN HA +# 04A9 valid # CYRILLIC SMALL LETTER ABKHASIAN HA +04AA >04AB # CYRILLIC CAPITAL LETTER ES WITH DESCENDER +# 04AB valid # CYRILLIC SMALL LETTER ES WITH DESCENDER +04AC >04AD # CYRILLIC CAPITAL LETTER TE WITH DESCENDER +# 04AD valid # CYRILLIC SMALL LETTER TE WITH DESCENDER +04AE >04AF # CYRILLIC CAPITAL LETTER STRAIGHT U +# 04AF valid # CYRILLIC SMALL LETTER STRAIGHT U +04B0 >04B1 # CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE +# 04B1 valid # CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE +04B2 >04B3 # CYRILLIC CAPITAL LETTER HA WITH DESCENDER +# 04B3 valid # CYRILLIC SMALL LETTER HA WITH DESCENDER +04B4 >04B5 # CYRILLIC CAPITAL LIGATURE TE TSE +# 04B5 valid # CYRILLIC SMALL LIGATURE TE TSE +04B6 >04B7 # CYRILLIC CAPITAL LETTER CHE WITH DESCENDER +# 04B7 valid # CYRILLIC SMALL LETTER CHE WITH DESCENDER +04B8 >04B9 # CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE +# 04B9 valid # CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE +04BA >04BB # CYRILLIC CAPITAL LETTER SHHA +# 04BB valid # CYRILLIC SMALL LETTER SHHA +04BC >04BD # CYRILLIC CAPITAL LETTER ABKHASIAN CHE +# 04BD valid # CYRILLIC SMALL LETTER ABKHASIAN CHE +04BE >04BF # CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER +# 04BF valid # CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER +04C0 >FFFD # CYRILLIC LETTER PALOCHKA +04C1 >04C2 # CYRILLIC CAPITAL LETTER ZHE WITH BREVE +# 04C2 valid # CYRILLIC SMALL LETTER ZHE WITH BREVE +04C3 >04C4 # CYRILLIC CAPITAL LETTER KA WITH HOOK +# 04C4 valid # CYRILLIC SMALL LETTER KA WITH HOOK +04C5 >04C6 # CYRILLIC CAPITAL LETTER EL WITH TAIL +# 04C6 valid # CYRILLIC SMALL LETTER EL WITH TAIL +04C7 >04C8 # CYRILLIC CAPITAL LETTER EN WITH HOOK +# 04C8 valid # CYRILLIC SMALL LETTER EN WITH HOOK +04C9 >04CA # CYRILLIC CAPITAL LETTER EN WITH TAIL +# 04CA valid # CYRILLIC SMALL LETTER EN WITH TAIL +04CB >04CC # CYRILLIC CAPITAL LETTER KHAKASSIAN CHE +# 04CC valid # CYRILLIC SMALL LETTER KHAKASSIAN CHE +04CD >04CE # CYRILLIC CAPITAL LETTER EM WITH TAIL +# 04CE..04CF valid # CYRILLIC SMALL LETTER EM WITH TAIL..CYRILLIC SMALL LETTER PALOCHKA +04D0 >04D1 # CYRILLIC CAPITAL LETTER A WITH BREVE +# 04D1 valid # CYRILLIC SMALL LETTER A WITH BREVE +04D2 >04D3 # CYRILLIC CAPITAL LETTER A WITH DIAERESIS +# 04D3 valid # CYRILLIC SMALL LETTER A WITH DIAERESIS +04D4 >04D5 # CYRILLIC CAPITAL LIGATURE A IE +# 04D5 valid # CYRILLIC SMALL LIGATURE A IE +04D6 >04D7 # CYRILLIC CAPITAL LETTER IE WITH BREVE +# 04D7 valid # CYRILLIC SMALL LETTER IE WITH BREVE +04D8 >04D9 # CYRILLIC CAPITAL LETTER SCHWA +# 04D9 valid # CYRILLIC SMALL LETTER SCHWA +04DA >04DB # CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS +# 04DB valid # CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS +04DC >04DD # CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS +# 04DD valid # CYRILLIC SMALL LETTER ZHE WITH DIAERESIS +04DE >04DF # CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS +# 04DF valid # CYRILLIC SMALL LETTER ZE WITH DIAERESIS +04E0 >04E1 # CYRILLIC CAPITAL LETTER ABKHASIAN DZE +# 04E1 valid # CYRILLIC SMALL LETTER ABKHASIAN DZE +04E2 >04E3 # CYRILLIC CAPITAL LETTER I WITH MACRON +# 04E3 valid # CYRILLIC SMALL LETTER I WITH MACRON +04E4 >04E5 # CYRILLIC CAPITAL LETTER I WITH DIAERESIS +# 04E5 valid # CYRILLIC SMALL LETTER I WITH DIAERESIS +04E6 >04E7 # CYRILLIC CAPITAL LETTER O WITH DIAERESIS +# 04E7 valid # CYRILLIC SMALL LETTER O WITH DIAERESIS +04E8 >04E9 # CYRILLIC CAPITAL LETTER BARRED O +# 04E9 valid # CYRILLIC SMALL LETTER BARRED O +04EA >04EB # CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS +# 04EB valid # CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS +04EC >04ED # CYRILLIC CAPITAL LETTER E WITH DIAERESIS +# 04ED valid # CYRILLIC SMALL LETTER E WITH DIAERESIS +04EE >04EF # CYRILLIC CAPITAL LETTER U WITH MACRON +# 04EF valid # CYRILLIC SMALL LETTER U WITH MACRON +04F0 >04F1 # CYRILLIC CAPITAL LETTER U WITH DIAERESIS +# 04F1 valid # CYRILLIC SMALL LETTER U WITH DIAERESIS +04F2 >04F3 # CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE +# 04F3 valid # CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE +04F4 >04F5 # CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS +# 04F5 valid # CYRILLIC SMALL LETTER CHE WITH DIAERESIS +04F6 >04F7 # CYRILLIC CAPITAL LETTER GHE WITH DESCENDER +# 04F7 valid # CYRILLIC SMALL LETTER GHE WITH DESCENDER +04F8 >04F9 # CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS +# 04F9 valid # CYRILLIC SMALL LETTER YERU WITH DIAERESIS +04FA >04FB # CYRILLIC CAPITAL LETTER GHE WITH STROKE AND HOOK +# 04FB valid # CYRILLIC SMALL LETTER GHE WITH STROKE AND HOOK +04FC >04FD # CYRILLIC CAPITAL LETTER HA WITH HOOK +# 04FD valid # CYRILLIC SMALL LETTER HA WITH HOOK +04FE >04FF # CYRILLIC CAPITAL LETTER HA WITH STROKE +# 04FF valid # CYRILLIC SMALL LETTER HA WITH STROKE +0500 >0501 # CYRILLIC CAPITAL LETTER KOMI DE +# 0501 valid # CYRILLIC SMALL LETTER KOMI DE +0502 >0503 # CYRILLIC CAPITAL LETTER KOMI DJE +# 0503 valid # CYRILLIC SMALL LETTER KOMI DJE +0504 >0505 # CYRILLIC CAPITAL LETTER KOMI ZJE +# 0505 valid # CYRILLIC SMALL LETTER KOMI ZJE +0506 >0507 # CYRILLIC CAPITAL LETTER KOMI DZJE +# 0507 valid # CYRILLIC SMALL LETTER KOMI DZJE +0508 >0509 # CYRILLIC CAPITAL LETTER KOMI LJE +# 0509 valid # CYRILLIC SMALL LETTER KOMI LJE +050A >050B # CYRILLIC CAPITAL LETTER KOMI NJE +# 050B valid # CYRILLIC SMALL LETTER KOMI NJE +050C >050D # CYRILLIC CAPITAL LETTER KOMI SJE +# 050D valid # CYRILLIC SMALL LETTER KOMI SJE +050E >050F # CYRILLIC CAPITAL LETTER KOMI TJE +# 050F valid # CYRILLIC SMALL LETTER KOMI TJE +0510 >0511 # CYRILLIC CAPITAL LETTER REVERSED ZE +# 0511 valid # CYRILLIC SMALL LETTER REVERSED ZE +0512 >0513 # CYRILLIC CAPITAL LETTER EL WITH HOOK +# 0513 valid # CYRILLIC SMALL LETTER EL WITH HOOK +0514 >0515 # CYRILLIC CAPITAL LETTER LHA +# 0515 valid # CYRILLIC SMALL LETTER LHA +0516 >0517 # CYRILLIC CAPITAL LETTER RHA +# 0517 valid # CYRILLIC SMALL LETTER RHA +0518 >0519 # CYRILLIC CAPITAL LETTER YAE +# 0519 valid # CYRILLIC SMALL LETTER YAE +051A >051B # CYRILLIC CAPITAL LETTER QA +# 051B valid # CYRILLIC SMALL LETTER QA +051C >051D # CYRILLIC CAPITAL LETTER WE +# 051D valid # CYRILLIC SMALL LETTER WE +051E >051F # CYRILLIC CAPITAL LETTER ALEUT KA +# 051F valid # CYRILLIC SMALL LETTER ALEUT KA +0520 >0521 # CYRILLIC CAPITAL LETTER EL WITH MIDDLE HOOK +# 0521 valid # CYRILLIC SMALL LETTER EL WITH MIDDLE HOOK +0522 >0523 # CYRILLIC CAPITAL LETTER EN WITH MIDDLE HOOK +# 0523 valid # CYRILLIC SMALL LETTER EN WITH MIDDLE HOOK +0524 >0525 # CYRILLIC CAPITAL LETTER PE WITH DESCENDER +# 0525 valid # CYRILLIC SMALL LETTER PE WITH DESCENDER +0526..0530 >FFFD # .. +0531 >0561 # ARMENIAN CAPITAL LETTER AYB +0532 >0562 # ARMENIAN CAPITAL LETTER BEN +0533 >0563 # ARMENIAN CAPITAL LETTER GIM +0534 >0564 # ARMENIAN CAPITAL LETTER DA +0535 >0565 # ARMENIAN CAPITAL LETTER ECH +0536 >0566 # ARMENIAN CAPITAL LETTER ZA +0537 >0567 # ARMENIAN CAPITAL LETTER EH +0538 >0568 # ARMENIAN CAPITAL LETTER ET +0539 >0569 # ARMENIAN CAPITAL LETTER TO +053A >056A # ARMENIAN CAPITAL LETTER ZHE +053B >056B # ARMENIAN CAPITAL LETTER INI +053C >056C # ARMENIAN CAPITAL LETTER LIWN +053D >056D # ARMENIAN CAPITAL LETTER XEH +053E >056E # ARMENIAN CAPITAL LETTER CA +053F >056F # ARMENIAN CAPITAL LETTER KEN +0540 >0570 # ARMENIAN CAPITAL LETTER HO +0541 >0571 # ARMENIAN CAPITAL LETTER JA +0542 >0572 # ARMENIAN CAPITAL LETTER GHAD +0543 >0573 # ARMENIAN CAPITAL LETTER CHEH +0544 >0574 # ARMENIAN CAPITAL LETTER MEN +0545 >0575 # ARMENIAN CAPITAL LETTER YI +0546 >0576 # ARMENIAN CAPITAL LETTER NOW +0547 >0577 # ARMENIAN CAPITAL LETTER SHA +0548 >0578 # ARMENIAN CAPITAL LETTER VO +0549 >0579 # ARMENIAN CAPITAL LETTER CHA +054A >057A # ARMENIAN CAPITAL LETTER PEH +054B >057B # ARMENIAN CAPITAL LETTER JHEH +054C >057C # ARMENIAN CAPITAL LETTER RA +054D >057D # ARMENIAN CAPITAL LETTER SEH +054E >057E # ARMENIAN CAPITAL LETTER VEW +054F >057F # ARMENIAN CAPITAL LETTER TIWN +0550 >0580 # ARMENIAN CAPITAL LETTER REH +0551 >0581 # ARMENIAN CAPITAL LETTER CO +0552 >0582 # ARMENIAN CAPITAL LETTER YIWN +0553 >0583 # ARMENIAN CAPITAL LETTER PIWR +0554 >0584 # ARMENIAN CAPITAL LETTER KEH +0555 >0585 # ARMENIAN CAPITAL LETTER OH +0556 >0586 # ARMENIAN CAPITAL LETTER FEH +0557..0558 >FFFD # .. +# 0559..055F valid # ARMENIAN MODIFIER LETTER LEFT HALF RING..ARMENIAN ABBREVIATION MARK +0560 >FFFD # +# 0561..0586 valid # ARMENIAN SMALL LETTER AYB..ARMENIAN SMALL LETTER FEH +0587 >0565 0582 # ARMENIAN SMALL LIGATURE ECH YIWN +0588 >FFFD # +# 0589..058A valid # ARMENIAN FULL STOP..ARMENIAN HYPHEN +058B..0590 >FFFD # .. +# 0591..05C7 valid # HEBREW ACCENT ETNAHTA..HEBREW POINT QAMATS QATAN +05C8..05CF >FFFD # .. +# 05D0..05EA valid # HEBREW LETTER ALEF..HEBREW LETTER TAV +05EB..05EF >FFFD # .. +# 05F0..05F4 valid # HEBREW LIGATURE YIDDISH DOUBLE VAV..HEBREW PUNCTUATION GERSHAYIM +05F5..05FF >FFFD # .. +0600..0603 >FFFD # ARABIC NUMBER SIGN..ARABIC SIGN SAFHA +0604..0605 >FFFD # .. +# 0606..061B valid # ARABIC-INDIC CUBE ROOT..ARABIC SEMICOLON +061C..061D >FFFD # .. +# 061E..061F valid # ARABIC TRIPLE DOT PUNCTUATION MARK..ARABIC QUESTION MARK +0620 >FFFD # +# 0621..065E valid # ARABIC LETTER HAMZA..ARABIC FATHA WITH TWO DOTS +065F >FFFD # +# 0660..0674 valid # ARABIC-INDIC DIGIT ZERO..ARABIC LETTER HIGH HAMZA +0675 >0627 0674 # ARABIC LETTER HIGH HAMZA ALEF +0676 >0648 0674 # ARABIC LETTER HIGH HAMZA WAW +0677 >06C7 0674 # ARABIC LETTER U WITH HAMZA ABOVE +0678 >064A 0674 # ARABIC LETTER HIGH HAMZA YEH +# 0679..06DC valid # ARABIC LETTER TTEH..ARABIC SMALL HIGH SEEN +06DD >FFFD # ARABIC END OF AYAH +# 06DE..070D valid # ARABIC START OF RUB EL HIZB..SYRIAC HARKLEAN ASTERISCUS +070E >FFFD # +070F >FFFD # SYRIAC ABBREVIATION MARK +# 0710..074A valid # SYRIAC LETTER ALAPH..SYRIAC BARREKH +074B..074C >FFFD # .. +# 074D..07B1 valid # SYRIAC LETTER SOGDIAN ZHAIN..THAANA LETTER NAA +07B2..07BF >FFFD # .. +# 07C0..07FA valid # NKO DIGIT ZERO..NKO LAJANYALAN +07FB..07FF >FFFD # .. +# 0800..082D valid # SAMARITAN LETTER ALAF..SAMARITAN MARK NEQUDAA +082E..082F >FFFD # .. +# 0830..083E valid # SAMARITAN PUNCTUATION NEQUDAA..SAMARITAN PUNCTUATION ANNAAU +083F..08FF >FFFD # .. +# 0900..0939 valid # DEVANAGARI SIGN INVERTED CANDRABINDU..DEVANAGARI LETTER HA +093A..093B >FFFD # .. +# 093C..094E valid # DEVANAGARI SIGN NUKTA..DEVANAGARI VOWEL SIGN PRISHTHAMATRA E +094F >FFFD # +# 0950..0955 valid # DEVANAGARI OM..DEVANAGARI VOWEL SIGN CANDRA LONG E +0956..0957 >FFFD # .. +0958 >0915 093C # DEVANAGARI LETTER QA +0959 >0916 093C # DEVANAGARI LETTER KHHA +095A >0917 093C # DEVANAGARI LETTER GHHA +095B >091C 093C # DEVANAGARI LETTER ZA +095C >0921 093C # DEVANAGARI LETTER DDDHA +095D >0922 093C # DEVANAGARI LETTER RHA +095E >092B 093C # DEVANAGARI LETTER FA +095F >092F 093C # DEVANAGARI LETTER YYA +# 0960..0972 valid # DEVANAGARI LETTER VOCALIC RR..DEVANAGARI LETTER CANDRA A +0973..0978 >FFFD # .. +# 0979..097F valid # DEVANAGARI LETTER ZHA..DEVANAGARI LETTER BBA +0980 >FFFD # +# 0981..0983 valid # BENGALI SIGN CANDRABINDU..BENGALI SIGN VISARGA +0984 >FFFD # +# 0985..098C valid # BENGALI LETTER A..BENGALI LETTER VOCALIC L +098D..098E >FFFD # .. +# 098F..0990 valid # BENGALI LETTER E..BENGALI LETTER AI +0991..0992 >FFFD # .. +# 0993..09A8 valid # BENGALI LETTER O..BENGALI LETTER NA +09A9 >FFFD # +# 09AA..09B0 valid # BENGALI LETTER PA..BENGALI LETTER RA +09B1 >FFFD # +# 09B2 valid # BENGALI LETTER LA +09B3..09B5 >FFFD # .. +# 09B6..09B9 valid # BENGALI LETTER SHA..BENGALI LETTER HA +09BA..09BB >FFFD # .. +# 09BC..09C4 valid # BENGALI SIGN NUKTA..BENGALI VOWEL SIGN VOCALIC RR +09C5..09C6 >FFFD # .. +# 09C7..09C8 valid # BENGALI VOWEL SIGN E..BENGALI VOWEL SIGN AI +09C9..09CA >FFFD # .. +# 09CB..09CE valid # BENGALI VOWEL SIGN O..BENGALI LETTER KHANDA TA +09CF..09D6 >FFFD # .. +# 09D7 valid # BENGALI AU LENGTH MARK +09D8..09DB >FFFD # .. +09DC >09A1 09BC # BENGALI LETTER RRA +09DD >09A2 09BC # BENGALI LETTER RHA +09DE >FFFD # +09DF >09AF 09BC # BENGALI LETTER YYA +# 09E0..09E3 valid # BENGALI LETTER VOCALIC RR..BENGALI VOWEL SIGN VOCALIC LL +09E4..09E5 >FFFD # .. +# 09E6..09FB valid # BENGALI DIGIT ZERO..BENGALI GANDA MARK +09FC..0A00 >FFFD # .. +# 0A01..0A03 valid # GURMUKHI SIGN ADAK BINDI..GURMUKHI SIGN VISARGA +0A04 >FFFD # +# 0A05..0A0A valid # GURMUKHI LETTER A..GURMUKHI LETTER UU +0A0B..0A0E >FFFD # .. +# 0A0F..0A10 valid # GURMUKHI LETTER EE..GURMUKHI LETTER AI +0A11..0A12 >FFFD # .. +# 0A13..0A28 valid # GURMUKHI LETTER OO..GURMUKHI LETTER NA +0A29 >FFFD # +# 0A2A..0A30 valid # GURMUKHI LETTER PA..GURMUKHI LETTER RA +0A31 >FFFD # +# 0A32 valid # GURMUKHI LETTER LA +0A33 >0A32 0A3C # GURMUKHI LETTER LLA +0A34 >FFFD # +# 0A35 valid # GURMUKHI LETTER VA +0A36 >0A38 0A3C # GURMUKHI LETTER SHA +0A37 >FFFD # +# 0A38..0A39 valid # GURMUKHI LETTER SA..GURMUKHI LETTER HA +0A3A..0A3B >FFFD # .. +# 0A3C valid # GURMUKHI SIGN NUKTA +0A3D >FFFD # +# 0A3E..0A42 valid # GURMUKHI VOWEL SIGN AA..GURMUKHI VOWEL SIGN UU +0A43..0A46 >FFFD # .. +# 0A47..0A48 valid # GURMUKHI VOWEL SIGN EE..GURMUKHI VOWEL SIGN AI +0A49..0A4A >FFFD # .. +# 0A4B..0A4D valid # GURMUKHI VOWEL SIGN OO..GURMUKHI SIGN VIRAMA +0A4E..0A50 >FFFD # .. +# 0A51 valid # GURMUKHI SIGN UDAAT +0A52..0A58 >FFFD # .. +0A59 >0A16 0A3C # GURMUKHI LETTER KHHA +0A5A >0A17 0A3C # GURMUKHI LETTER GHHA +0A5B >0A1C 0A3C # GURMUKHI LETTER ZA +# 0A5C valid # GURMUKHI LETTER RRA +0A5D >FFFD # +0A5E >0A2B 0A3C # GURMUKHI LETTER FA +0A5F..0A65 >FFFD # .. +# 0A66..0A75 valid # GURMUKHI DIGIT ZERO..GURMUKHI SIGN YAKASH +0A76..0A80 >FFFD # .. +# 0A81..0A83 valid # GUJARATI SIGN CANDRABINDU..GUJARATI SIGN VISARGA +0A84 >FFFD # +# 0A85..0A8D valid # GUJARATI LETTER A..GUJARATI VOWEL CANDRA E +0A8E >FFFD # +# 0A8F..0A91 valid # GUJARATI LETTER E..GUJARATI VOWEL CANDRA O +0A92 >FFFD # +# 0A93..0AA8 valid # GUJARATI LETTER O..GUJARATI LETTER NA +0AA9 >FFFD # +# 0AAA..0AB0 valid # GUJARATI LETTER PA..GUJARATI LETTER RA +0AB1 >FFFD # +# 0AB2..0AB3 valid # GUJARATI LETTER LA..GUJARATI LETTER LLA +0AB4 >FFFD # +# 0AB5..0AB9 valid # GUJARATI LETTER VA..GUJARATI LETTER HA +0ABA..0ABB >FFFD # .. +# 0ABC..0AC5 valid # GUJARATI SIGN NUKTA..GUJARATI VOWEL SIGN CANDRA E +0AC6 >FFFD # +# 0AC7..0AC9 valid # GUJARATI VOWEL SIGN E..GUJARATI VOWEL SIGN CANDRA O +0ACA >FFFD # +# 0ACB..0ACD valid # GUJARATI VOWEL SIGN O..GUJARATI SIGN VIRAMA +0ACE..0ACF >FFFD # .. +# 0AD0 valid # GUJARATI OM +0AD1..0ADF >FFFD # .. +# 0AE0..0AE3 valid # GUJARATI LETTER VOCALIC RR..GUJARATI VOWEL SIGN VOCALIC LL +0AE4..0AE5 >FFFD # .. +# 0AE6..0AEF valid # GUJARATI DIGIT ZERO..GUJARATI DIGIT NINE +0AF0 >FFFD # +# 0AF1 valid # GUJARATI RUPEE SIGN +0AF2..0B00 >FFFD # .. +# 0B01..0B03 valid # ORIYA SIGN CANDRABINDU..ORIYA SIGN VISARGA +0B04 >FFFD # +# 0B05..0B0C valid # ORIYA LETTER A..ORIYA LETTER VOCALIC L +0B0D..0B0E >FFFD # .. +# 0B0F..0B10 valid # ORIYA LETTER E..ORIYA LETTER AI +0B11..0B12 >FFFD # .. +# 0B13..0B28 valid # ORIYA LETTER O..ORIYA LETTER NA +0B29 >FFFD # +# 0B2A..0B30 valid # ORIYA LETTER PA..ORIYA LETTER RA +0B31 >FFFD # +# 0B32..0B33 valid # ORIYA LETTER LA..ORIYA LETTER LLA +0B34 >FFFD # +# 0B35..0B39 valid # ORIYA LETTER VA..ORIYA LETTER HA +0B3A..0B3B >FFFD # .. +# 0B3C..0B44 valid # ORIYA SIGN NUKTA..ORIYA VOWEL SIGN VOCALIC RR +0B45..0B46 >FFFD # .. +# 0B47..0B48 valid # ORIYA VOWEL SIGN E..ORIYA VOWEL SIGN AI +0B49..0B4A >FFFD # .. +# 0B4B..0B4D valid # ORIYA VOWEL SIGN O..ORIYA SIGN VIRAMA +0B4E..0B55 >FFFD # .. +# 0B56..0B57 valid # ORIYA AI LENGTH MARK..ORIYA AU LENGTH MARK +0B58..0B5B >FFFD # .. +0B5C >0B21 0B3C # ORIYA LETTER RRA +0B5D >0B22 0B3C # ORIYA LETTER RHA +0B5E >FFFD # +# 0B5F..0B63 valid # ORIYA LETTER YYA..ORIYA VOWEL SIGN VOCALIC LL +0B64..0B65 >FFFD # .. +# 0B66..0B71 valid # ORIYA DIGIT ZERO..ORIYA LETTER WA +0B72..0B81 >FFFD # .. +# 0B82..0B83 valid # TAMIL SIGN ANUSVARA..TAMIL SIGN VISARGA +0B84 >FFFD # +# 0B85..0B8A valid # TAMIL LETTER A..TAMIL LETTER UU +0B8B..0B8D >FFFD # .. +# 0B8E..0B90 valid # TAMIL LETTER E..TAMIL LETTER AI +0B91 >FFFD # +# 0B92..0B95 valid # TAMIL LETTER O..TAMIL LETTER KA +0B96..0B98 >FFFD # .. +# 0B99..0B9A valid # TAMIL LETTER NGA..TAMIL LETTER CA +0B9B >FFFD # +# 0B9C valid # TAMIL LETTER JA +0B9D >FFFD # +# 0B9E..0B9F valid # TAMIL LETTER NYA..TAMIL LETTER TTA +0BA0..0BA2 >FFFD # .. +# 0BA3..0BA4 valid # TAMIL LETTER NNA..TAMIL LETTER TA +0BA5..0BA7 >FFFD # .. +# 0BA8..0BAA valid # TAMIL LETTER NA..TAMIL LETTER PA +0BAB..0BAD >FFFD # .. +# 0BAE..0BB9 valid # TAMIL LETTER MA..TAMIL LETTER HA +0BBA..0BBD >FFFD # .. +# 0BBE..0BC2 valid # TAMIL VOWEL SIGN AA..TAMIL VOWEL SIGN UU +0BC3..0BC5 >FFFD # .. +# 0BC6..0BC8 valid # TAMIL VOWEL SIGN E..TAMIL VOWEL SIGN AI +0BC9 >FFFD # +# 0BCA..0BCD valid # TAMIL VOWEL SIGN O..TAMIL SIGN VIRAMA +0BCE..0BCF >FFFD # .. +# 0BD0 valid # TAMIL OM +0BD1..0BD6 >FFFD # .. +# 0BD7 valid # TAMIL AU LENGTH MARK +0BD8..0BE5 >FFFD # .. +# 0BE6..0BFA valid # TAMIL DIGIT ZERO..TAMIL NUMBER SIGN +0BFB..0C00 >FFFD # .. +# 0C01..0C03 valid # TELUGU SIGN CANDRABINDU..TELUGU SIGN VISARGA +0C04 >FFFD # +# 0C05..0C0C valid # TELUGU LETTER A..TELUGU LETTER VOCALIC L +0C0D >FFFD # +# 0C0E..0C10 valid # TELUGU LETTER E..TELUGU LETTER AI +0C11 >FFFD # +# 0C12..0C28 valid # TELUGU LETTER O..TELUGU LETTER NA +0C29 >FFFD # +# 0C2A..0C33 valid # TELUGU LETTER PA..TELUGU LETTER LLA +0C34 >FFFD # +# 0C35..0C39 valid # TELUGU LETTER VA..TELUGU LETTER HA +0C3A..0C3C >FFFD # .. +# 0C3D..0C44 valid # TELUGU SIGN AVAGRAHA..TELUGU VOWEL SIGN VOCALIC RR +0C45 >FFFD # +# 0C46..0C48 valid # TELUGU VOWEL SIGN E..TELUGU VOWEL SIGN AI +0C49 >FFFD # +# 0C4A..0C4D valid # TELUGU VOWEL SIGN O..TELUGU SIGN VIRAMA +0C4E..0C54 >FFFD # .. +# 0C55..0C56 valid # TELUGU LENGTH MARK..TELUGU AI LENGTH MARK +0C57 >FFFD # +# 0C58..0C59 valid # TELUGU LETTER TSA..TELUGU LETTER DZA +0C5A..0C5F >FFFD # .. +# 0C60..0C63 valid # TELUGU LETTER VOCALIC RR..TELUGU VOWEL SIGN VOCALIC LL +0C64..0C65 >FFFD # .. +# 0C66..0C6F valid # TELUGU DIGIT ZERO..TELUGU DIGIT NINE +0C70..0C77 >FFFD # .. +# 0C78..0C7F valid # TELUGU FRACTION DIGIT ZERO FOR ODD POWERS OF FOUR..TELUGU SIGN TUUMU +0C80..0C81 >FFFD # .. +# 0C82..0C83 valid # KANNADA SIGN ANUSVARA..KANNADA SIGN VISARGA +0C84 >FFFD # +# 0C85..0C8C valid # KANNADA LETTER A..KANNADA LETTER VOCALIC L +0C8D >FFFD # +# 0C8E..0C90 valid # KANNADA LETTER E..KANNADA LETTER AI +0C91 >FFFD # +# 0C92..0CA8 valid # KANNADA LETTER O..KANNADA LETTER NA +0CA9 >FFFD # +# 0CAA..0CB3 valid # KANNADA LETTER PA..KANNADA LETTER LLA +0CB4 >FFFD # +# 0CB5..0CB9 valid # KANNADA LETTER VA..KANNADA LETTER HA +0CBA..0CBB >FFFD # .. +# 0CBC..0CC4 valid # KANNADA SIGN NUKTA..KANNADA VOWEL SIGN VOCALIC RR +0CC5 >FFFD # +# 0CC6..0CC8 valid # KANNADA VOWEL SIGN E..KANNADA VOWEL SIGN AI +0CC9 >FFFD # +# 0CCA..0CCD valid # KANNADA VOWEL SIGN O..KANNADA SIGN VIRAMA +0CCE..0CD4 >FFFD # .. +# 0CD5..0CD6 valid # KANNADA LENGTH MARK..KANNADA AI LENGTH MARK +0CD7..0CDD >FFFD # .. +# 0CDE valid # KANNADA LETTER FA +0CDF >FFFD # +# 0CE0..0CE3 valid # KANNADA LETTER VOCALIC RR..KANNADA VOWEL SIGN VOCALIC LL +0CE4..0CE5 >FFFD # .. +# 0CE6..0CEF valid # KANNADA DIGIT ZERO..KANNADA DIGIT NINE +0CF0 >FFFD # +# 0CF1..0CF2 valid # KANNADA SIGN JIHVAMULIYA..KANNADA SIGN UPADHMANIYA +0CF3..0D01 >FFFD # .. +# 0D02..0D03 valid # MALAYALAM SIGN ANUSVARA..MALAYALAM SIGN VISARGA +0D04 >FFFD # +# 0D05..0D0C valid # MALAYALAM LETTER A..MALAYALAM LETTER VOCALIC L +0D0D >FFFD # +# 0D0E..0D10 valid # MALAYALAM LETTER E..MALAYALAM LETTER AI +0D11 >FFFD # +# 0D12..0D28 valid # MALAYALAM LETTER O..MALAYALAM LETTER NA +0D29 >FFFD # +# 0D2A..0D39 valid # MALAYALAM LETTER PA..MALAYALAM LETTER HA +0D3A..0D3C >FFFD # .. +# 0D3D..0D44 valid # MALAYALAM SIGN AVAGRAHA..MALAYALAM VOWEL SIGN VOCALIC RR +0D45 >FFFD # +# 0D46..0D48 valid # MALAYALAM VOWEL SIGN E..MALAYALAM VOWEL SIGN AI +0D49 >FFFD # +# 0D4A..0D4D valid # MALAYALAM VOWEL SIGN O..MALAYALAM SIGN VIRAMA +0D4E..0D56 >FFFD # .. +# 0D57 valid # MALAYALAM AU LENGTH MARK +0D58..0D5F >FFFD # .. +# 0D60..0D63 valid # MALAYALAM LETTER VOCALIC RR..MALAYALAM VOWEL SIGN VOCALIC LL +0D64..0D65 >FFFD # .. +# 0D66..0D75 valid # MALAYALAM DIGIT ZERO..MALAYALAM FRACTION THREE QUARTERS +0D76..0D78 >FFFD # .. +# 0D79..0D7F valid # MALAYALAM DATE MARK..MALAYALAM LETTER CHILLU K +0D80..0D81 >FFFD # .. +# 0D82..0D83 valid # SINHALA SIGN ANUSVARAYA..SINHALA SIGN VISARGAYA +0D84 >FFFD # +# 0D85..0D96 valid # SINHALA LETTER AYANNA..SINHALA LETTER AUYANNA +0D97..0D99 >FFFD # .. +# 0D9A..0DB1 valid # SINHALA LETTER ALPAPRAANA KAYANNA..SINHALA LETTER DANTAJA NAYANNA +0DB2 >FFFD # +# 0DB3..0DBB valid # SINHALA LETTER SANYAKA DAYANNA..SINHALA LETTER RAYANNA +0DBC >FFFD # +# 0DBD valid # SINHALA LETTER DANTAJA LAYANNA +0DBE..0DBF >FFFD # .. +# 0DC0..0DC6 valid # SINHALA LETTER VAYANNA..SINHALA LETTER FAYANNA +0DC7..0DC9 >FFFD # .. +# 0DCA valid # SINHALA SIGN AL-LAKUNA +0DCB..0DCE >FFFD # .. +# 0DCF..0DD4 valid # SINHALA VOWEL SIGN AELA-PILLA..SINHALA VOWEL SIGN KETTI PAA-PILLA +0DD5 >FFFD # +# 0DD6 valid # SINHALA VOWEL SIGN DIGA PAA-PILLA +0DD7 >FFFD # +# 0DD8..0DDF valid # SINHALA VOWEL SIGN GAETTA-PILLA..SINHALA VOWEL SIGN GAYANUKITTA +0DE0..0DF1 >FFFD # .. +# 0DF2..0DF4 valid # SINHALA VOWEL SIGN DIGA GAETTA-PILLA..SINHALA PUNCTUATION KUNDDALIYA +0DF5..0E00 >FFFD # .. +# 0E01..0E32 valid # THAI CHARACTER KO KAI..THAI CHARACTER SARA AA +0E33 >0E4D 0E32 # THAI CHARACTER SARA AM +# 0E34..0E3A valid # THAI CHARACTER SARA I..THAI CHARACTER PHINTHU +0E3B..0E3E >FFFD # .. +# 0E3F..0E5B valid # THAI CURRENCY SYMBOL BAHT..THAI CHARACTER KHOMUT +0E5C..0E80 >FFFD # .. +# 0E81..0E82 valid # LAO LETTER KO..LAO LETTER KHO SUNG +0E83 >FFFD # +# 0E84 valid # LAO LETTER KHO TAM +0E85..0E86 >FFFD # .. +# 0E87..0E88 valid # LAO LETTER NGO..LAO LETTER CO +0E89 >FFFD # +# 0E8A valid # LAO LETTER SO TAM +0E8B..0E8C >FFFD # .. +# 0E8D valid # LAO LETTER NYO +0E8E..0E93 >FFFD # .. +# 0E94..0E97 valid # LAO LETTER DO..LAO LETTER THO TAM +0E98 >FFFD # +# 0E99..0E9F valid # LAO LETTER NO..LAO LETTER FO SUNG +0EA0 >FFFD # +# 0EA1..0EA3 valid # LAO LETTER MO..LAO LETTER LO LING +0EA4 >FFFD # +# 0EA5 valid # LAO LETTER LO LOOT +0EA6 >FFFD # +# 0EA7 valid # LAO LETTER WO +0EA8..0EA9 >FFFD # .. +# 0EAA..0EAB valid # LAO LETTER SO SUNG..LAO LETTER HO SUNG +0EAC >FFFD # +# 0EAD..0EB2 valid # LAO LETTER O..LAO VOWEL SIGN AA +0EB3 >0ECD 0EB2 # LAO VOWEL SIGN AM +# 0EB4..0EB9 valid # LAO VOWEL SIGN I..LAO VOWEL SIGN UU +0EBA >FFFD # +# 0EBB..0EBD valid # LAO VOWEL SIGN MAI KON..LAO SEMIVOWEL SIGN NYO +0EBE..0EBF >FFFD # .. +# 0EC0..0EC4 valid # LAO VOWEL SIGN E..LAO VOWEL SIGN AI +0EC5 >FFFD # +# 0EC6 valid # LAO KO LA +0EC7 >FFFD # +# 0EC8..0ECD valid # LAO TONE MAI EK..LAO NIGGAHITA +0ECE..0ECF >FFFD # .. +# 0ED0..0ED9 valid # LAO DIGIT ZERO..LAO DIGIT NINE +0EDA..0EDB >FFFD # .. +0EDC >0EAB 0E99 # LAO HO NO +0EDD >0EAB 0EA1 # LAO HO MO +0EDE..0EFF >FFFD # .. +# 0F00..0F0B valid # TIBETAN SYLLABLE OM..TIBETAN MARK INTERSYLLABIC TSHEG +0F0C >0F0B # TIBETAN MARK DELIMITER TSHEG BSTAR +# 0F0D..0F42 valid # TIBETAN MARK SHAD..TIBETAN LETTER GA +0F43 >0F42 0FB7 # TIBETAN LETTER GHA +# 0F44..0F47 valid # TIBETAN LETTER NGA..TIBETAN LETTER JA +0F48 >FFFD # +# 0F49..0F4C valid # TIBETAN LETTER NYA..TIBETAN LETTER DDA +0F4D >0F4C 0FB7 # TIBETAN LETTER DDHA +# 0F4E..0F51 valid # TIBETAN LETTER NNA..TIBETAN LETTER DA +0F52 >0F51 0FB7 # TIBETAN LETTER DHA +# 0F53..0F56 valid # TIBETAN LETTER NA..TIBETAN LETTER BA +0F57 >0F56 0FB7 # TIBETAN LETTER BHA +# 0F58..0F5B valid # TIBETAN LETTER MA..TIBETAN LETTER DZA +0F5C >0F5B 0FB7 # TIBETAN LETTER DZHA +# 0F5D..0F68 valid # TIBETAN LETTER WA..TIBETAN LETTER A +0F69 >0F40 0FB5 # TIBETAN LETTER KSSA +# 0F6A..0F6C valid # TIBETAN LETTER FIXED-FORM RA..TIBETAN LETTER RRA +0F6D..0F70 >FFFD # .. +# 0F71..0F72 valid # TIBETAN VOWEL SIGN AA..TIBETAN VOWEL SIGN I +0F73 >0F71 0F72 # TIBETAN VOWEL SIGN II +# 0F74 valid # TIBETAN VOWEL SIGN U +0F75 >0F71 0F74 # TIBETAN VOWEL SIGN UU +0F76 >0FB2 0F80 # TIBETAN VOWEL SIGN VOCALIC R +0F77 >0FB2 0F71 0F80 # TIBETAN VOWEL SIGN VOCALIC RR +0F78 >0FB3 0F80 # TIBETAN VOWEL SIGN VOCALIC L +0F79 >0FB3 0F71 0F80 # TIBETAN VOWEL SIGN VOCALIC LL +# 0F7A..0F80 valid # TIBETAN VOWEL SIGN E..TIBETAN VOWEL SIGN REVERSED I +0F81 >0F71 0F80 # TIBETAN VOWEL SIGN REVERSED II +# 0F82..0F8B valid # TIBETAN SIGN NYI ZLA NAA DA..TIBETAN SIGN GRU MED RGYINGS +0F8C..0F8F >FFFD # .. +# 0F90..0F92 valid # TIBETAN SUBJOINED LETTER KA..TIBETAN SUBJOINED LETTER GA +0F93 >0F92 0FB7 # TIBETAN SUBJOINED LETTER GHA +# 0F94..0F97 valid # TIBETAN SUBJOINED LETTER NGA..TIBETAN SUBJOINED LETTER JA +0F98 >FFFD # +# 0F99..0F9C valid # TIBETAN SUBJOINED LETTER NYA..TIBETAN SUBJOINED LETTER DDA +0F9D >0F9C 0FB7 # TIBETAN SUBJOINED LETTER DDHA +# 0F9E..0FA1 valid # TIBETAN SUBJOINED LETTER NNA..TIBETAN SUBJOINED LETTER DA +0FA2 >0FA1 0FB7 # TIBETAN SUBJOINED LETTER DHA +# 0FA3..0FA6 valid # TIBETAN SUBJOINED LETTER NA..TIBETAN SUBJOINED LETTER BA +0FA7 >0FA6 0FB7 # TIBETAN SUBJOINED LETTER BHA +# 0FA8..0FAB valid # TIBETAN SUBJOINED LETTER MA..TIBETAN SUBJOINED LETTER DZA +0FAC >0FAB 0FB7 # TIBETAN SUBJOINED LETTER DZHA +# 0FAD..0FB8 valid # TIBETAN SUBJOINED LETTER WA..TIBETAN SUBJOINED LETTER A +0FB9 >0F90 0FB5 # TIBETAN SUBJOINED LETTER KSSA +# 0FBA..0FBC valid # TIBETAN SUBJOINED LETTER FIXED-FORM WA..TIBETAN SUBJOINED LETTER FIXED-FORM RA +0FBD >FFFD # +# 0FBE..0FCC valid # TIBETAN KU RU KHA..TIBETAN SYMBOL NOR BU BZHI -KHYIL +0FCD >FFFD # +# 0FCE..0FD8 valid # TIBETAN SIGN RDEL NAG RDEL DKAR..LEFT-FACING SVASTI SIGN WITH DOTS +0FD9..0FFF >FFFD # .. +# 1000..109F valid # MYANMAR LETTER KA..MYANMAR SYMBOL SHAN EXCLAMATION +10A0..10C5 >FFFD # GEORGIAN CAPITAL LETTER AN..GEORGIAN CAPITAL LETTER HOE +10C6..10CF >FFFD # .. +# 10D0..10FB valid # GEORGIAN LETTER AN..GEORGIAN PARAGRAPH SEPARATOR +10FC >10DC # MODIFIER LETTER GEORGIAN NAR +10FD..10FF >FFFD # .. +# 1100..115E valid # HANGUL CHOSEONG KIYEOK..HANGUL CHOSEONG TIKEUT-RIEUL +115F..1160 >FFFD # HANGUL CHOSEONG FILLER..HANGUL JUNGSEONG FILLER +# 1161..1248 valid # HANGUL JUNGSEONG A..ETHIOPIC SYLLABLE QWA +1249 >FFFD # +# 124A..124D valid # ETHIOPIC SYLLABLE QWI..ETHIOPIC SYLLABLE QWE +124E..124F >FFFD # .. +# 1250..1256 valid # ETHIOPIC SYLLABLE QHA..ETHIOPIC SYLLABLE QHO +1257 >FFFD # +# 1258 valid # ETHIOPIC SYLLABLE QHWA +1259 >FFFD # +# 125A..125D valid # ETHIOPIC SYLLABLE QHWI..ETHIOPIC SYLLABLE QHWE +125E..125F >FFFD # .. +# 1260..1288 valid # ETHIOPIC SYLLABLE BA..ETHIOPIC SYLLABLE XWA +1289 >FFFD # +# 128A..128D valid # ETHIOPIC SYLLABLE XWI..ETHIOPIC SYLLABLE XWE +128E..128F >FFFD # .. +# 1290..12B0 valid # ETHIOPIC SYLLABLE NA..ETHIOPIC SYLLABLE KWA +12B1 >FFFD # +# 12B2..12B5 valid # ETHIOPIC SYLLABLE KWI..ETHIOPIC SYLLABLE KWE +12B6..12B7 >FFFD # .. +# 12B8..12BE valid # ETHIOPIC SYLLABLE KXA..ETHIOPIC SYLLABLE KXO +12BF >FFFD # +# 12C0 valid # ETHIOPIC SYLLABLE KXWA +12C1 >FFFD # +# 12C2..12C5 valid # ETHIOPIC SYLLABLE KXWI..ETHIOPIC SYLLABLE KXWE +12C6..12C7 >FFFD # .. +# 12C8..12D6 valid # ETHIOPIC SYLLABLE WA..ETHIOPIC SYLLABLE PHARYNGEAL O +12D7 >FFFD # +# 12D8..1310 valid # ETHIOPIC SYLLABLE ZA..ETHIOPIC SYLLABLE GWA +1311 >FFFD # +# 1312..1315 valid # ETHIOPIC SYLLABLE GWI..ETHIOPIC SYLLABLE GWE +1316..1317 >FFFD # .. +# 1318..135A valid # ETHIOPIC SYLLABLE GGA..ETHIOPIC SYLLABLE FYA +135B..135E >FFFD # .. +# 135F..137C valid # ETHIOPIC COMBINING GEMINATION MARK..ETHIOPIC NUMBER TEN THOUSAND +137D..137F >FFFD # .. +# 1380..1399 valid # ETHIOPIC SYLLABLE SEBATBEIT MWA..ETHIOPIC TONAL MARK KURT +139A..139F >FFFD # .. +# 13A0..13F4 valid # CHEROKEE LETTER A..CHEROKEE LETTER YV +13F5..13FF >FFFD # .. +# 1400..167F valid # CANADIAN SYLLABICS HYPHEN..CANADIAN SYLLABICS BLACKFOOT W +1680 >FFFD # OGHAM SPACE MARK +# 1681..169C valid # OGHAM LETTER BEITH..OGHAM REVERSED FEATHER MARK +169D..169F >FFFD # .. +# 16A0..16F0 valid # RUNIC LETTER FEHU FEOH FE F..RUNIC BELGTHOR SYMBOL +16F1..16FF >FFFD # .. +# 1700..170C valid # TAGALOG LETTER A..TAGALOG LETTER YA +170D >FFFD # +# 170E..1714 valid # TAGALOG LETTER LA..TAGALOG SIGN VIRAMA +1715..171F >FFFD # .. +# 1720..1736 valid # HANUNOO LETTER A..PHILIPPINE DOUBLE PUNCTUATION +1737..173F >FFFD # .. +# 1740..1753 valid # BUHID LETTER A..BUHID VOWEL SIGN U +1754..175F >FFFD # .. +# 1760..176C valid # TAGBANWA LETTER A..TAGBANWA LETTER YA +176D >FFFD # +# 176E..1770 valid # TAGBANWA LETTER LA..TAGBANWA LETTER SA +1771 >FFFD # +# 1772..1773 valid # TAGBANWA VOWEL SIGN I..TAGBANWA VOWEL SIGN U +1774..177F >FFFD # .. +# 1780..17B3 valid # KHMER LETTER KA..KHMER INDEPENDENT VOWEL QAU +17B4..17B5 >FFFD # KHMER VOWEL INHERENT AQ..KHMER VOWEL INHERENT AA +# 17B6..17DD valid # KHMER VOWEL SIGN AA..KHMER SIGN ATTHACAN +17DE..17DF >FFFD # .. +# 17E0..17E9 valid # KHMER DIGIT ZERO..KHMER DIGIT NINE +17EA..17EF >FFFD # .. +# 17F0..17F9 valid # KHMER SYMBOL LEK ATTAK SON..KHMER SYMBOL LEK ATTAK PRAM-BUON +17FA..17FF >FFFD # .. +# 1800..1805 valid # MONGOLIAN BIRGA..MONGOLIAN FOUR DOTS +1806 >FFFD # MONGOLIAN TODO SOFT HYPHEN +# 1807..180A valid # MONGOLIAN SIBE SYLLABLE BOUNDARY MARKER..MONGOLIAN NIRUGU +180B..180D > # MONGOLIAN FREE VARIATION SELECTOR ONE..MONGOLIAN FREE VARIATION SELECTOR THREE +180E >FFFD # MONGOLIAN VOWEL SEPARATOR +180F >FFFD # +# 1810..1819 valid # MONGOLIAN DIGIT ZERO..MONGOLIAN DIGIT NINE +181A..181F >FFFD # .. +# 1820..1877 valid # MONGOLIAN LETTER A..MONGOLIAN LETTER MANCHU ZHA +1878..187F >FFFD # .. +# 1880..18AA valid # MONGOLIAN LETTER ALI GALI ANUSVARA ONE..MONGOLIAN LETTER MANCHU ALI GALI LHA +18AB..18AF >FFFD # .. +# 18B0..18F5 valid # CANADIAN SYLLABICS OY..CANADIAN SYLLABICS CARRIER DENTAL S +18F6..18FF >FFFD # .. +# 1900..191C valid # LIMBU VOWEL-CARRIER LETTER..LIMBU LETTER HA +191D..191F >FFFD # .. +# 1920..192B valid # LIMBU VOWEL SIGN A..LIMBU SUBJOINED LETTER WA +192C..192F >FFFD # .. +# 1930..193B valid # LIMBU SMALL LETTER KA..LIMBU SIGN SA-I +193C..193F >FFFD # .. +# 1940 valid # LIMBU SIGN LOO +1941..1943 >FFFD # .. +# 1944..196D valid # LIMBU EXCLAMATION MARK..TAI LE LETTER AI +196E..196F >FFFD # .. +# 1970..1974 valid # TAI LE LETTER TONE-2..TAI LE LETTER TONE-6 +1975..197F >FFFD # .. +# 1980..19AB valid # NEW TAI LUE LETTER HIGH QA..NEW TAI LUE LETTER LOW SUA +19AC..19AF >FFFD # .. +# 19B0..19C9 valid # NEW TAI LUE VOWEL SIGN VOWEL SHORTENER..NEW TAI LUE TONE MARK-2 +19CA..19CF >FFFD # .. +# 19D0..19DA valid # NEW TAI LUE DIGIT ZERO..NEW TAI LUE THAM DIGIT ONE +19DB..19DD >FFFD # .. +# 19DE..1A1B valid # NEW TAI LUE SIGN LAE..BUGINESE VOWEL SIGN AE +1A1C..1A1D >FFFD # .. +# 1A1E..1A5E valid # BUGINESE PALLAWA..TAI THAM CONSONANT SIGN SA +1A5F >FFFD # +# 1A60..1A7C valid # TAI THAM SIGN SAKOT..TAI THAM SIGN KHUEN-LUE KARAN +1A7D..1A7E >FFFD # .. +# 1A7F..1A89 valid # TAI THAM COMBINING CRYPTOGRAMMIC DOT..TAI THAM HORA DIGIT NINE +1A8A..1A8F >FFFD # .. +# 1A90..1A99 valid # TAI THAM THAM DIGIT ZERO..TAI THAM THAM DIGIT NINE +1A9A..1A9F >FFFD # .. +# 1AA0..1AAD valid # TAI THAM SIGN WIANG..TAI THAM SIGN CAANG +1AAE..1AFF >FFFD # .. +# 1B00..1B4B valid # BALINESE SIGN ULU RICEM..BALINESE LETTER ASYURA SASAK +1B4C..1B4F >FFFD # .. +# 1B50..1B7C valid # BALINESE DIGIT ZERO..BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PING +1B7D..1B7F >FFFD # .. +# 1B80..1BAA valid # SUNDANESE SIGN PANYECEK..SUNDANESE SIGN PAMAAEH +1BAB..1BAD >FFFD # .. +# 1BAE..1BB9 valid # SUNDANESE LETTER KHA..SUNDANESE DIGIT NINE +1BBA..1BFF >FFFD # .. +# 1C00..1C37 valid # LEPCHA LETTER KA..LEPCHA SIGN NUKTA +1C38..1C3A >FFFD # .. +# 1C3B..1C49 valid # LEPCHA PUNCTUATION TA-ROL..LEPCHA DIGIT NINE +1C4A..1C4C >FFFD # .. +# 1C4D..1C7F valid # LEPCHA LETTER TTA..OL CHIKI PUNCTUATION DOUBLE MUCAAD +1C80..1CCF >FFFD # .. +# 1CD0..1CF2 valid # VEDIC TONE KARSHANA..VEDIC SIGN ARDHAVISARGA +1CF3..1CFF >FFFD # .. +# 1D00..1D2B valid # LATIN LETTER SMALL CAPITAL A..CYRILLIC LETTER SMALL CAPITAL EL +1D2C >0061 # MODIFIER LETTER CAPITAL A +1D2D >00E6 # MODIFIER LETTER CAPITAL AE +1D2E >0062 # MODIFIER LETTER CAPITAL B +# 1D2F valid # MODIFIER LETTER CAPITAL BARRED B +1D30 >0064 # MODIFIER LETTER CAPITAL D +1D31 >0065 # MODIFIER LETTER CAPITAL E +1D32 >01DD # MODIFIER LETTER CAPITAL REVERSED E +1D33 >0067 # MODIFIER LETTER CAPITAL G +1D34 >0068 # MODIFIER LETTER CAPITAL H +1D35 >0069 # MODIFIER LETTER CAPITAL I +1D36 >006A # MODIFIER LETTER CAPITAL J +1D37 >006B # MODIFIER LETTER CAPITAL K +1D38 >006C # MODIFIER LETTER CAPITAL L +1D39 >006D # MODIFIER LETTER CAPITAL M +1D3A >006E # MODIFIER LETTER CAPITAL N +# 1D3B valid # MODIFIER LETTER CAPITAL REVERSED N +1D3C >006F # MODIFIER LETTER CAPITAL O +1D3D >0223 # MODIFIER LETTER CAPITAL OU +1D3E >0070 # MODIFIER LETTER CAPITAL P +1D3F >0072 # MODIFIER LETTER CAPITAL R +1D40 >0074 # MODIFIER LETTER CAPITAL T +1D41 >0075 # MODIFIER LETTER CAPITAL U +1D42 >0077 # MODIFIER LETTER CAPITAL W +1D43 >0061 # MODIFIER LETTER SMALL A +1D44 >0250 # MODIFIER LETTER SMALL TURNED A +1D45 >0251 # MODIFIER LETTER SMALL ALPHA +1D46 >1D02 # MODIFIER LETTER SMALL TURNED AE +1D47 >0062 # MODIFIER LETTER SMALL B +1D48 >0064 # MODIFIER LETTER SMALL D +1D49 >0065 # MODIFIER LETTER SMALL E +1D4A >0259 # MODIFIER LETTER SMALL SCHWA +1D4B >025B # MODIFIER LETTER SMALL OPEN E +1D4C >025C # MODIFIER LETTER SMALL TURNED OPEN E +1D4D >0067 # MODIFIER LETTER SMALL G +# 1D4E valid # MODIFIER LETTER SMALL TURNED I +1D4F >006B # MODIFIER LETTER SMALL K +1D50 >006D # MODIFIER LETTER SMALL M +1D51 >014B # MODIFIER LETTER SMALL ENG +1D52 >006F # MODIFIER LETTER SMALL O +1D53 >0254 # MODIFIER LETTER SMALL OPEN O +1D54 >1D16 # MODIFIER LETTER SMALL TOP HALF O +1D55 >1D17 # MODIFIER LETTER SMALL BOTTOM HALF O +1D56 >0070 # MODIFIER LETTER SMALL P +1D57 >0074 # MODIFIER LETTER SMALL T +1D58 >0075 # MODIFIER LETTER SMALL U +1D59 >1D1D # MODIFIER LETTER SMALL SIDEWAYS U +1D5A >026F # MODIFIER LETTER SMALL TURNED M +1D5B >0076 # MODIFIER LETTER SMALL V +1D5C >1D25 # MODIFIER LETTER SMALL AIN +1D5D >03B2 # MODIFIER LETTER SMALL BETA +1D5E >03B3 # MODIFIER LETTER SMALL GREEK GAMMA +1D5F >03B4 # MODIFIER LETTER SMALL DELTA +1D60 >03C6 # MODIFIER LETTER SMALL GREEK PHI +1D61 >03C7 # MODIFIER LETTER SMALL CHI +1D62 >0069 # LATIN SUBSCRIPT SMALL LETTER I +1D63 >0072 # LATIN SUBSCRIPT SMALL LETTER R +1D64 >0075 # LATIN SUBSCRIPT SMALL LETTER U +1D65 >0076 # LATIN SUBSCRIPT SMALL LETTER V +1D66 >03B2 # GREEK SUBSCRIPT SMALL LETTER BETA +1D67 >03B3 # GREEK SUBSCRIPT SMALL LETTER GAMMA +1D68 >03C1 # GREEK SUBSCRIPT SMALL LETTER RHO +1D69 >03C6 # GREEK SUBSCRIPT SMALL LETTER PHI +1D6A >03C7 # GREEK SUBSCRIPT SMALL LETTER CHI +# 1D6B..1D77 valid # LATIN SMALL LETTER UE..LATIN SMALL LETTER TURNED G +1D78 >043D # MODIFIER LETTER CYRILLIC EN +# 1D79..1D9A valid # LATIN SMALL LETTER INSULAR G..LATIN SMALL LETTER EZH WITH RETROFLEX HOOK +1D9B >0252 # MODIFIER LETTER SMALL TURNED ALPHA +1D9C >0063 # MODIFIER LETTER SMALL C +1D9D >0255 # MODIFIER LETTER SMALL C WITH CURL +1D9E >00F0 # MODIFIER LETTER SMALL ETH +1D9F >025C # MODIFIER LETTER SMALL REVERSED OPEN E +1DA0 >0066 # MODIFIER LETTER SMALL F +1DA1 >025F # MODIFIER LETTER SMALL DOTLESS J WITH STROKE +1DA2 >0261 # MODIFIER LETTER SMALL SCRIPT G +1DA3 >0265 # MODIFIER LETTER SMALL TURNED H +1DA4 >0268 # MODIFIER LETTER SMALL I WITH STROKE +1DA5 >0269 # MODIFIER LETTER SMALL IOTA +1DA6 >026A # MODIFIER LETTER SMALL CAPITAL I +1DA7 >1D7B # MODIFIER LETTER SMALL CAPITAL I WITH STROKE +1DA8 >029D # MODIFIER LETTER SMALL J WITH CROSSED-TAIL +1DA9 >026D # MODIFIER LETTER SMALL L WITH RETROFLEX HOOK +1DAA >1D85 # MODIFIER LETTER SMALL L WITH PALATAL HOOK +1DAB >029F # MODIFIER LETTER SMALL CAPITAL L +1DAC >0271 # MODIFIER LETTER SMALL M WITH HOOK +1DAD >0270 # MODIFIER LETTER SMALL TURNED M WITH LONG LEG +1DAE >0272 # MODIFIER LETTER SMALL N WITH LEFT HOOK +1DAF >0273 # MODIFIER LETTER SMALL N WITH RETROFLEX HOOK +1DB0 >0274 # MODIFIER LETTER SMALL CAPITAL N +1DB1 >0275 # MODIFIER LETTER SMALL BARRED O +1DB2 >0278 # MODIFIER LETTER SMALL PHI +1DB3 >0282 # MODIFIER LETTER SMALL S WITH HOOK +1DB4 >0283 # MODIFIER LETTER SMALL ESH +1DB5 >01AB # MODIFIER LETTER SMALL T WITH PALATAL HOOK +1DB6 >0289 # MODIFIER LETTER SMALL U BAR +1DB7 >028A # MODIFIER LETTER SMALL UPSILON +1DB8 >1D1C # MODIFIER LETTER SMALL CAPITAL U +1DB9 >028B # MODIFIER LETTER SMALL V WITH HOOK +1DBA >028C # MODIFIER LETTER SMALL TURNED V +1DBB >007A # MODIFIER LETTER SMALL Z +1DBC >0290 # MODIFIER LETTER SMALL Z WITH RETROFLEX HOOK +1DBD >0291 # MODIFIER LETTER SMALL Z WITH CURL +1DBE >0292 # MODIFIER LETTER SMALL EZH +1DBF >03B8 # MODIFIER LETTER SMALL THETA +# 1DC0..1DE6 valid # COMBINING DOTTED GRAVE ACCENT..COMBINING LATIN SMALL LETTER Z +1DE7..1DFC >FFFD # .. +# 1DFD..1DFF valid # COMBINING ALMOST EQUAL TO BELOW..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW +1E00 >1E01 # LATIN CAPITAL LETTER A WITH RING BELOW +# 1E01 valid # LATIN SMALL LETTER A WITH RING BELOW +1E02 >1E03 # LATIN CAPITAL LETTER B WITH DOT ABOVE +# 1E03 valid # LATIN SMALL LETTER B WITH DOT ABOVE +1E04 >1E05 # LATIN CAPITAL LETTER B WITH DOT BELOW +# 1E05 valid # LATIN SMALL LETTER B WITH DOT BELOW +1E06 >1E07 # LATIN CAPITAL LETTER B WITH LINE BELOW +# 1E07 valid # LATIN SMALL LETTER B WITH LINE BELOW +1E08 >1E09 # LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE +# 1E09 valid # LATIN SMALL LETTER C WITH CEDILLA AND ACUTE +1E0A >1E0B # LATIN CAPITAL LETTER D WITH DOT ABOVE +# 1E0B valid # LATIN SMALL LETTER D WITH DOT ABOVE +1E0C >1E0D # LATIN CAPITAL LETTER D WITH DOT BELOW +# 1E0D valid # LATIN SMALL LETTER D WITH DOT BELOW +1E0E >1E0F # LATIN CAPITAL LETTER D WITH LINE BELOW +# 1E0F valid # LATIN SMALL LETTER D WITH LINE BELOW +1E10 >1E11 # LATIN CAPITAL LETTER D WITH CEDILLA +# 1E11 valid # LATIN SMALL LETTER D WITH CEDILLA +1E12 >1E13 # LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW +# 1E13 valid # LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW +1E14 >1E15 # LATIN CAPITAL LETTER E WITH MACRON AND GRAVE +# 1E15 valid # LATIN SMALL LETTER E WITH MACRON AND GRAVE +1E16 >1E17 # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE +# 1E17 valid # LATIN SMALL LETTER E WITH MACRON AND ACUTE +1E18 >1E19 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW +# 1E19 valid # LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW +1E1A >1E1B # LATIN CAPITAL LETTER E WITH TILDE BELOW +# 1E1B valid # LATIN SMALL LETTER E WITH TILDE BELOW +1E1C >1E1D # LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE +# 1E1D valid # LATIN SMALL LETTER E WITH CEDILLA AND BREVE +1E1E >1E1F # LATIN CAPITAL LETTER F WITH DOT ABOVE +# 1E1F valid # LATIN SMALL LETTER F WITH DOT ABOVE +1E20 >1E21 # LATIN CAPITAL LETTER G WITH MACRON +# 1E21 valid # LATIN SMALL LETTER G WITH MACRON +1E22 >1E23 # LATIN CAPITAL LETTER H WITH DOT ABOVE +# 1E23 valid # LATIN SMALL LETTER H WITH DOT ABOVE +1E24 >1E25 # LATIN CAPITAL LETTER H WITH DOT BELOW +# 1E25 valid # LATIN SMALL LETTER H WITH DOT BELOW +1E26 >1E27 # LATIN CAPITAL LETTER H WITH DIAERESIS +# 1E27 valid # LATIN SMALL LETTER H WITH DIAERESIS +1E28 >1E29 # LATIN CAPITAL LETTER H WITH CEDILLA +# 1E29 valid # LATIN SMALL LETTER H WITH CEDILLA +1E2A >1E2B # LATIN CAPITAL LETTER H WITH BREVE BELOW +# 1E2B valid # LATIN SMALL LETTER H WITH BREVE BELOW +1E2C >1E2D # LATIN CAPITAL LETTER I WITH TILDE BELOW +# 1E2D valid # LATIN SMALL LETTER I WITH TILDE BELOW +1E2E >1E2F # LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE +# 1E2F valid # LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE +1E30 >1E31 # LATIN CAPITAL LETTER K WITH ACUTE +# 1E31 valid # LATIN SMALL LETTER K WITH ACUTE +1E32 >1E33 # LATIN CAPITAL LETTER K WITH DOT BELOW +# 1E33 valid # LATIN SMALL LETTER K WITH DOT BELOW +1E34 >1E35 # LATIN CAPITAL LETTER K WITH LINE BELOW +# 1E35 valid # LATIN SMALL LETTER K WITH LINE BELOW +1E36 >1E37 # LATIN CAPITAL LETTER L WITH DOT BELOW +# 1E37 valid # LATIN SMALL LETTER L WITH DOT BELOW +1E38 >1E39 # LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON +# 1E39 valid # LATIN SMALL LETTER L WITH DOT BELOW AND MACRON +1E3A >1E3B # LATIN CAPITAL LETTER L WITH LINE BELOW +# 1E3B valid # LATIN SMALL LETTER L WITH LINE BELOW +1E3C >1E3D # LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW +# 1E3D valid # LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW +1E3E >1E3F # LATIN CAPITAL LETTER M WITH ACUTE +# 1E3F valid # LATIN SMALL LETTER M WITH ACUTE +1E40 >1E41 # LATIN CAPITAL LETTER M WITH DOT ABOVE +# 1E41 valid # LATIN SMALL LETTER M WITH DOT ABOVE +1E42 >1E43 # LATIN CAPITAL LETTER M WITH DOT BELOW +# 1E43 valid # LATIN SMALL LETTER M WITH DOT BELOW +1E44 >1E45 # LATIN CAPITAL LETTER N WITH DOT ABOVE +# 1E45 valid # LATIN SMALL LETTER N WITH DOT ABOVE +1E46 >1E47 # LATIN CAPITAL LETTER N WITH DOT BELOW +# 1E47 valid # LATIN SMALL LETTER N WITH DOT BELOW +1E48 >1E49 # LATIN CAPITAL LETTER N WITH LINE BELOW +# 1E49 valid # LATIN SMALL LETTER N WITH LINE BELOW +1E4A >1E4B # LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW +# 1E4B valid # LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW +1E4C >1E4D # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE +# 1E4D valid # LATIN SMALL LETTER O WITH TILDE AND ACUTE +1E4E >1E4F # LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS +# 1E4F valid # LATIN SMALL LETTER O WITH TILDE AND DIAERESIS +1E50 >1E51 # LATIN CAPITAL LETTER O WITH MACRON AND GRAVE +# 1E51 valid # LATIN SMALL LETTER O WITH MACRON AND GRAVE +1E52 >1E53 # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE +# 1E53 valid # LATIN SMALL LETTER O WITH MACRON AND ACUTE +1E54 >1E55 # LATIN CAPITAL LETTER P WITH ACUTE +# 1E55 valid # LATIN SMALL LETTER P WITH ACUTE +1E56 >1E57 # LATIN CAPITAL LETTER P WITH DOT ABOVE +# 1E57 valid # LATIN SMALL LETTER P WITH DOT ABOVE +1E58 >1E59 # LATIN CAPITAL LETTER R WITH DOT ABOVE +# 1E59 valid # LATIN SMALL LETTER R WITH DOT ABOVE +1E5A >1E5B # LATIN CAPITAL LETTER R WITH DOT BELOW +# 1E5B valid # LATIN SMALL LETTER R WITH DOT BELOW +1E5C >1E5D # LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON +# 1E5D valid # LATIN SMALL LETTER R WITH DOT BELOW AND MACRON +1E5E >1E5F # LATIN CAPITAL LETTER R WITH LINE BELOW +# 1E5F valid # LATIN SMALL LETTER R WITH LINE BELOW +1E60 >1E61 # LATIN CAPITAL LETTER S WITH DOT ABOVE +# 1E61 valid # LATIN SMALL LETTER S WITH DOT ABOVE +1E62 >1E63 # LATIN CAPITAL LETTER S WITH DOT BELOW +# 1E63 valid # LATIN SMALL LETTER S WITH DOT BELOW +1E64 >1E65 # LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE +# 1E65 valid # LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE +1E66 >1E67 # LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE +# 1E67 valid # LATIN SMALL LETTER S WITH CARON AND DOT ABOVE +1E68 >1E69 # LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE +# 1E69 valid # LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE +1E6A >1E6B # LATIN CAPITAL LETTER T WITH DOT ABOVE +# 1E6B valid # LATIN SMALL LETTER T WITH DOT ABOVE +1E6C >1E6D # LATIN CAPITAL LETTER T WITH DOT BELOW +# 1E6D valid # LATIN SMALL LETTER T WITH DOT BELOW +1E6E >1E6F # LATIN CAPITAL LETTER T WITH LINE BELOW +# 1E6F valid # LATIN SMALL LETTER T WITH LINE BELOW +1E70 >1E71 # LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW +# 1E71 valid # LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW +1E72 >1E73 # LATIN CAPITAL LETTER U WITH DIAERESIS BELOW +# 1E73 valid # LATIN SMALL LETTER U WITH DIAERESIS BELOW +1E74 >1E75 # LATIN CAPITAL LETTER U WITH TILDE BELOW +# 1E75 valid # LATIN SMALL LETTER U WITH TILDE BELOW +1E76 >1E77 # LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW +# 1E77 valid # LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW +1E78 >1E79 # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE +# 1E79 valid # LATIN SMALL LETTER U WITH TILDE AND ACUTE +1E7A >1E7B # LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS +# 1E7B valid # LATIN SMALL LETTER U WITH MACRON AND DIAERESIS +1E7C >1E7D # LATIN CAPITAL LETTER V WITH TILDE +# 1E7D valid # LATIN SMALL LETTER V WITH TILDE +1E7E >1E7F # LATIN CAPITAL LETTER V WITH DOT BELOW +# 1E7F valid # LATIN SMALL LETTER V WITH DOT BELOW +1E80 >1E81 # LATIN CAPITAL LETTER W WITH GRAVE +# 1E81 valid # LATIN SMALL LETTER W WITH GRAVE +1E82 >1E83 # LATIN CAPITAL LETTER W WITH ACUTE +# 1E83 valid # LATIN SMALL LETTER W WITH ACUTE +1E84 >1E85 # LATIN CAPITAL LETTER W WITH DIAERESIS +# 1E85 valid # LATIN SMALL LETTER W WITH DIAERESIS +1E86 >1E87 # LATIN CAPITAL LETTER W WITH DOT ABOVE +# 1E87 valid # LATIN SMALL LETTER W WITH DOT ABOVE +1E88 >1E89 # LATIN CAPITAL LETTER W WITH DOT BELOW +# 1E89 valid # LATIN SMALL LETTER W WITH DOT BELOW +1E8A >1E8B # LATIN CAPITAL LETTER X WITH DOT ABOVE +# 1E8B valid # LATIN SMALL LETTER X WITH DOT ABOVE +1E8C >1E8D # LATIN CAPITAL LETTER X WITH DIAERESIS +# 1E8D valid # LATIN SMALL LETTER X WITH DIAERESIS +1E8E >1E8F # LATIN CAPITAL LETTER Y WITH DOT ABOVE +# 1E8F valid # LATIN SMALL LETTER Y WITH DOT ABOVE +1E90 >1E91 # LATIN CAPITAL LETTER Z WITH CIRCUMFLEX +# 1E91 valid # LATIN SMALL LETTER Z WITH CIRCUMFLEX +1E92 >1E93 # LATIN CAPITAL LETTER Z WITH DOT BELOW +# 1E93 valid # LATIN SMALL LETTER Z WITH DOT BELOW +1E94 >1E95 # LATIN CAPITAL LETTER Z WITH LINE BELOW +# 1E95..1E99 valid # LATIN SMALL LETTER Z WITH LINE BELOW..LATIN SMALL LETTER Y WITH RING ABOVE +1E9A >0061 02BE # LATIN SMALL LETTER A WITH RIGHT HALF RING +1E9B >1E61 # LATIN SMALL LETTER LONG S WITH DOT ABOVE +# 1E9C..1E9D valid # LATIN SMALL LETTER LONG S WITH DIAGONAL STROKE..LATIN SMALL LETTER LONG S WITH HIGH STROKE +1E9E >0073 0073 # LATIN CAPITAL LETTER SHARP S +# 1E9F valid # LATIN SMALL LETTER DELTA +1EA0 >1EA1 # LATIN CAPITAL LETTER A WITH DOT BELOW +# 1EA1 valid # LATIN SMALL LETTER A WITH DOT BELOW +1EA2 >1EA3 # LATIN CAPITAL LETTER A WITH HOOK ABOVE +# 1EA3 valid # LATIN SMALL LETTER A WITH HOOK ABOVE +1EA4 >1EA5 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE +# 1EA5 valid # LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE +1EA6 >1EA7 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE +# 1EA7 valid # LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE +1EA8 >1EA9 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE +# 1EA9 valid # LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE +1EAA >1EAB # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE +# 1EAB valid # LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE +1EAC >1EAD # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW +# 1EAD valid # LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW +1EAE >1EAF # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE +# 1EAF valid # LATIN SMALL LETTER A WITH BREVE AND ACUTE +1EB0 >1EB1 # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE +# 1EB1 valid # LATIN SMALL LETTER A WITH BREVE AND GRAVE +1EB2 >1EB3 # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE +# 1EB3 valid # LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE +1EB4 >1EB5 # LATIN CAPITAL LETTER A WITH BREVE AND TILDE +# 1EB5 valid # LATIN SMALL LETTER A WITH BREVE AND TILDE +1EB6 >1EB7 # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW +# 1EB7 valid # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW +1EB8 >1EB9 # LATIN CAPITAL LETTER E WITH DOT BELOW +# 1EB9 valid # LATIN SMALL LETTER E WITH DOT BELOW +1EBA >1EBB # LATIN CAPITAL LETTER E WITH HOOK ABOVE +# 1EBB valid # LATIN SMALL LETTER E WITH HOOK ABOVE +1EBC >1EBD # LATIN CAPITAL LETTER E WITH TILDE +# 1EBD valid # LATIN SMALL LETTER E WITH TILDE +1EBE >1EBF # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE +# 1EBF valid # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE +1EC0 >1EC1 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE +# 1EC1 valid # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE +1EC2 >1EC3 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE +# 1EC3 valid # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE +1EC4 >1EC5 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE +# 1EC5 valid # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE +1EC6 >1EC7 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW +# 1EC7 valid # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW +1EC8 >1EC9 # LATIN CAPITAL LETTER I WITH HOOK ABOVE +# 1EC9 valid # LATIN SMALL LETTER I WITH HOOK ABOVE +1ECA >1ECB # LATIN CAPITAL LETTER I WITH DOT BELOW +# 1ECB valid # LATIN SMALL LETTER I WITH DOT BELOW +1ECC >1ECD # LATIN CAPITAL LETTER O WITH DOT BELOW +# 1ECD valid # LATIN SMALL LETTER O WITH DOT BELOW +1ECE >1ECF # LATIN CAPITAL LETTER O WITH HOOK ABOVE +# 1ECF valid # LATIN SMALL LETTER O WITH HOOK ABOVE +1ED0 >1ED1 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE +# 1ED1 valid # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE +1ED2 >1ED3 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE +# 1ED3 valid # LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE +1ED4 >1ED5 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE +# 1ED5 valid # LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE +1ED6 >1ED7 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE +# 1ED7 valid # LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE +1ED8 >1ED9 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW +# 1ED9 valid # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW +1EDA >1EDB # LATIN CAPITAL LETTER O WITH HORN AND ACUTE +# 1EDB valid # LATIN SMALL LETTER O WITH HORN AND ACUTE +1EDC >1EDD # LATIN CAPITAL LETTER O WITH HORN AND GRAVE +# 1EDD valid # LATIN SMALL LETTER O WITH HORN AND GRAVE +1EDE >1EDF # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE +# 1EDF valid # LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE +1EE0 >1EE1 # LATIN CAPITAL LETTER O WITH HORN AND TILDE +# 1EE1 valid # LATIN SMALL LETTER O WITH HORN AND TILDE +1EE2 >1EE3 # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW +# 1EE3 valid # LATIN SMALL LETTER O WITH HORN AND DOT BELOW +1EE4 >1EE5 # LATIN CAPITAL LETTER U WITH DOT BELOW +# 1EE5 valid # LATIN SMALL LETTER U WITH DOT BELOW +1EE6 >1EE7 # LATIN CAPITAL LETTER U WITH HOOK ABOVE +# 1EE7 valid # LATIN SMALL LETTER U WITH HOOK ABOVE +1EE8 >1EE9 # LATIN CAPITAL LETTER U WITH HORN AND ACUTE +# 1EE9 valid # LATIN SMALL LETTER U WITH HORN AND ACUTE +1EEA >1EEB # LATIN CAPITAL LETTER U WITH HORN AND GRAVE +# 1EEB valid # LATIN SMALL LETTER U WITH HORN AND GRAVE +1EEC >1EED # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE +# 1EED valid # LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE +1EEE >1EEF # LATIN CAPITAL LETTER U WITH HORN AND TILDE +# 1EEF valid # LATIN SMALL LETTER U WITH HORN AND TILDE +1EF0 >1EF1 # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW +# 1EF1 valid # LATIN SMALL LETTER U WITH HORN AND DOT BELOW +1EF2 >1EF3 # LATIN CAPITAL LETTER Y WITH GRAVE +# 1EF3 valid # LATIN SMALL LETTER Y WITH GRAVE +1EF4 >1EF5 # LATIN CAPITAL LETTER Y WITH DOT BELOW +# 1EF5 valid # LATIN SMALL LETTER Y WITH DOT BELOW +1EF6 >1EF7 # LATIN CAPITAL LETTER Y WITH HOOK ABOVE +# 1EF7 valid # LATIN SMALL LETTER Y WITH HOOK ABOVE +1EF8 >1EF9 # LATIN CAPITAL LETTER Y WITH TILDE +# 1EF9 valid # LATIN SMALL LETTER Y WITH TILDE +1EFA >1EFB # LATIN CAPITAL LETTER MIDDLE-WELSH LL +# 1EFB valid # LATIN SMALL LETTER MIDDLE-WELSH LL +1EFC >1EFD # LATIN CAPITAL LETTER MIDDLE-WELSH V +# 1EFD valid # LATIN SMALL LETTER MIDDLE-WELSH V +1EFE >1EFF # LATIN CAPITAL LETTER Y WITH LOOP +# 1EFF..1F07 valid # LATIN SMALL LETTER Y WITH LOOP..GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI +1F08 >1F00 # GREEK CAPITAL LETTER ALPHA WITH PSILI +1F09 >1F01 # GREEK CAPITAL LETTER ALPHA WITH DASIA +1F0A >1F02 # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA +1F0B >1F03 # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA +1F0C >1F04 # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA +1F0D >1F05 # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA +1F0E >1F06 # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI +1F0F >1F07 # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI +# 1F10..1F15 valid # GREEK SMALL LETTER EPSILON WITH PSILI..GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA +1F16..1F17 >FFFD # .. +1F18 >1F10 # GREEK CAPITAL LETTER EPSILON WITH PSILI +1F19 >1F11 # GREEK CAPITAL LETTER EPSILON WITH DASIA +1F1A >1F12 # GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA +1F1B >1F13 # GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA +1F1C >1F14 # GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA +1F1D >1F15 # GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA +1F1E..1F1F >FFFD # .. +# 1F20..1F27 valid # GREEK SMALL LETTER ETA WITH PSILI..GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI +1F28 >1F20 # GREEK CAPITAL LETTER ETA WITH PSILI +1F29 >1F21 # GREEK CAPITAL LETTER ETA WITH DASIA +1F2A >1F22 # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA +1F2B >1F23 # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA +1F2C >1F24 # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA +1F2D >1F25 # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA +1F2E >1F26 # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI +1F2F >1F27 # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI +# 1F30..1F37 valid # GREEK SMALL LETTER IOTA WITH PSILI..GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI +1F38 >1F30 # GREEK CAPITAL LETTER IOTA WITH PSILI +1F39 >1F31 # GREEK CAPITAL LETTER IOTA WITH DASIA +1F3A >1F32 # GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA +1F3B >1F33 # GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA +1F3C >1F34 # GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA +1F3D >1F35 # GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA +1F3E >1F36 # GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI +1F3F >1F37 # GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI +# 1F40..1F45 valid # GREEK SMALL LETTER OMICRON WITH PSILI..GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA +1F46..1F47 >FFFD # .. +1F48 >1F40 # GREEK CAPITAL LETTER OMICRON WITH PSILI +1F49 >1F41 # GREEK CAPITAL LETTER OMICRON WITH DASIA +1F4A >1F42 # GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA +1F4B >1F43 # GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA +1F4C >1F44 # GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA +1F4D >1F45 # GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA +1F4E..1F4F >FFFD # .. +# 1F50..1F57 valid # GREEK SMALL LETTER UPSILON WITH PSILI..GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI +1F58 >FFFD # +1F59 >1F51 # GREEK CAPITAL LETTER UPSILON WITH DASIA +1F5A >FFFD # +1F5B >1F53 # GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA +1F5C >FFFD # +1F5D >1F55 # GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA +1F5E >FFFD # +1F5F >1F57 # GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI +# 1F60..1F67 valid # GREEK SMALL LETTER OMEGA WITH PSILI..GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI +1F68 >1F60 # GREEK CAPITAL LETTER OMEGA WITH PSILI +1F69 >1F61 # GREEK CAPITAL LETTER OMEGA WITH DASIA +1F6A >1F62 # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA +1F6B >1F63 # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA +1F6C >1F64 # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA +1F6D >1F65 # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA +1F6E >1F66 # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI +1F6F >1F67 # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI +# 1F70 valid # GREEK SMALL LETTER ALPHA WITH VARIA +1F71 >03AC # GREEK SMALL LETTER ALPHA WITH OXIA +# 1F72 valid # GREEK SMALL LETTER EPSILON WITH VARIA +1F73 >03AD # GREEK SMALL LETTER EPSILON WITH OXIA +# 1F74 valid # GREEK SMALL LETTER ETA WITH VARIA +1F75 >03AE # GREEK SMALL LETTER ETA WITH OXIA +# 1F76 valid # GREEK SMALL LETTER IOTA WITH VARIA +1F77 >03AF # GREEK SMALL LETTER IOTA WITH OXIA +# 1F78 valid # GREEK SMALL LETTER OMICRON WITH VARIA +1F79 >03CC # GREEK SMALL LETTER OMICRON WITH OXIA +# 1F7A valid # GREEK SMALL LETTER UPSILON WITH VARIA +1F7B >03CD # GREEK SMALL LETTER UPSILON WITH OXIA +# 1F7C valid # GREEK SMALL LETTER OMEGA WITH VARIA +1F7D >03CE # GREEK SMALL LETTER OMEGA WITH OXIA +1F7E..1F7F >FFFD # .. +1F80 >1F00 03B9 # GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI +1F81 >1F01 03B9 # GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI +1F82 >1F02 03B9 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI +1F83 >1F03 03B9 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI +1F84 >1F04 03B9 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI +1F85 >1F05 03B9 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI +1F86 >1F06 03B9 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI +1F87 >1F07 03B9 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI +1F88 >1F00 03B9 # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI +1F89 >1F01 03B9 # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI +1F8A >1F02 03B9 # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI +1F8B >1F03 03B9 # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI +1F8C >1F04 03B9 # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI +1F8D >1F05 03B9 # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI +1F8E >1F06 03B9 # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI +1F8F >1F07 03B9 # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI +1F90 >1F20 03B9 # GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI +1F91 >1F21 03B9 # GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI +1F92 >1F22 03B9 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI +1F93 >1F23 03B9 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI +1F94 >1F24 03B9 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI +1F95 >1F25 03B9 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI +1F96 >1F26 03B9 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI +1F97 >1F27 03B9 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI +1F98 >1F20 03B9 # GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI +1F99 >1F21 03B9 # GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI +1F9A >1F22 03B9 # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI +1F9B >1F23 03B9 # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI +1F9C >1F24 03B9 # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI +1F9D >1F25 03B9 # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI +1F9E >1F26 03B9 # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI +1F9F >1F27 03B9 # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI +1FA0 >1F60 03B9 # GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI +1FA1 >1F61 03B9 # GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI +1FA2 >1F62 03B9 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI +1FA3 >1F63 03B9 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI +1FA4 >1F64 03B9 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI +1FA5 >1F65 03B9 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI +1FA6 >1F66 03B9 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI +1FA7 >1F67 03B9 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI +1FA8 >1F60 03B9 # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI +1FA9 >1F61 03B9 # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI +1FAA >1F62 03B9 # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI +1FAB >1F63 03B9 # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI +1FAC >1F64 03B9 # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI +1FAD >1F65 03B9 # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI +1FAE >1F66 03B9 # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI +1FAF >1F67 03B9 # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI +# 1FB0..1FB1 valid # GREEK SMALL LETTER ALPHA WITH VRACHY..GREEK SMALL LETTER ALPHA WITH MACRON +1FB2 >1F70 03B9 # GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI +1FB3 >03B1 03B9 # GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI +1FB4 >03AC 03B9 # GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI +1FB5 >FFFD # +# 1FB6 valid # GREEK SMALL LETTER ALPHA WITH PERISPOMENI +1FB7 >1FB6 03B9 # GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI +1FB8 >1FB0 # GREEK CAPITAL LETTER ALPHA WITH VRACHY +1FB9 >1FB1 # GREEK CAPITAL LETTER ALPHA WITH MACRON +1FBA >1F70 # GREEK CAPITAL LETTER ALPHA WITH VARIA +1FBB >03AC # GREEK CAPITAL LETTER ALPHA WITH OXIA +1FBC >03B1 03B9 # GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI +1FBD >FFFD # GREEK KORONIS +1FBE >03B9 # GREEK PROSGEGRAMMENI +1FBF..1FC1 >FFFD # GREEK PSILI..GREEK DIALYTIKA AND PERISPOMENI +1FC2 >1F74 03B9 # GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI +1FC3 >03B7 03B9 # GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI +1FC4 >03AE 03B9 # GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI +1FC5 >FFFD # +# 1FC6 valid # GREEK SMALL LETTER ETA WITH PERISPOMENI +1FC7 >1FC6 03B9 # GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI +1FC8 >1F72 # GREEK CAPITAL LETTER EPSILON WITH VARIA +1FC9 >03AD # GREEK CAPITAL LETTER EPSILON WITH OXIA +1FCA >1F74 # GREEK CAPITAL LETTER ETA WITH VARIA +1FCB >03AE # GREEK CAPITAL LETTER ETA WITH OXIA +1FCC >03B7 03B9 # GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI +1FCD..1FCF >FFFD # GREEK PSILI AND VARIA..GREEK PSILI AND PERISPOMENI +# 1FD0..1FD2 valid # GREEK SMALL LETTER IOTA WITH VRACHY..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA +1FD3 >0390 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA +1FD4..1FD5 >FFFD # .. +# 1FD6..1FD7 valid # GREEK SMALL LETTER IOTA WITH PERISPOMENI..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI +1FD8 >1FD0 # GREEK CAPITAL LETTER IOTA WITH VRACHY +1FD9 >1FD1 # GREEK CAPITAL LETTER IOTA WITH MACRON +1FDA >1F76 # GREEK CAPITAL LETTER IOTA WITH VARIA +1FDB >03AF # GREEK CAPITAL LETTER IOTA WITH OXIA +1FDC >FFFD # +1FDD..1FDF >FFFD # GREEK DASIA AND VARIA..GREEK DASIA AND PERISPOMENI +# 1FE0..1FE2 valid # GREEK SMALL LETTER UPSILON WITH VRACHY..GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA +1FE3 >03B0 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA +# 1FE4..1FE7 valid # GREEK SMALL LETTER RHO WITH PSILI..GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI +1FE8 >1FE0 # GREEK CAPITAL LETTER UPSILON WITH VRACHY +1FE9 >1FE1 # GREEK CAPITAL LETTER UPSILON WITH MACRON +1FEA >1F7A # GREEK CAPITAL LETTER UPSILON WITH VARIA +1FEB >03CD # GREEK CAPITAL LETTER UPSILON WITH OXIA +1FEC >1FE5 # GREEK CAPITAL LETTER RHO WITH DASIA +1FED..1FEF >FFFD # GREEK DIALYTIKA AND VARIA..GREEK VARIA +1FF0..1FF1 >FFFD # .. +1FF2 >1F7C 03B9 # GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI +1FF3 >03C9 03B9 # GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI +1FF4 >03CE 03B9 # GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI +1FF5 >FFFD # +# 1FF6 valid # GREEK SMALL LETTER OMEGA WITH PERISPOMENI +1FF7 >1FF6 03B9 # GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI +1FF8 >1F78 # GREEK CAPITAL LETTER OMICRON WITH VARIA +1FF9 >03CC # GREEK CAPITAL LETTER OMICRON WITH OXIA +1FFA >1F7C # GREEK CAPITAL LETTER OMEGA WITH VARIA +1FFB >03CE # GREEK CAPITAL LETTER OMEGA WITH OXIA +1FFC >03C9 03B9 # GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI +1FFD..1FFE >FFFD # GREEK OXIA..GREEK DASIA +1FFF >FFFD # +2000..200A >FFFD # EN QUAD..HAIR SPACE +200B > # ZERO WIDTH SPACE +# 200C..200D deviation ; # ZERO WIDTH NON-JOINER..ZERO WIDTH JOINER +200E..200F >FFFD # LEFT-TO-RIGHT MARK..RIGHT-TO-LEFT MARK +# 2010 valid # HYPHEN +2011 >2010 # NON-BREAKING HYPHEN +# 2012..2016 valid # FIGURE DASH..DOUBLE VERTICAL LINE +2017 >FFFD # DOUBLE LOW LINE +# 2018..2023 valid # LEFT SINGLE QUOTATION MARK..TRIANGULAR BULLET +2024..2026 >FFFD # ONE DOT LEADER..HORIZONTAL ELLIPSIS +# 2027 valid # HYPHENATION POINT +2028..202F >FFFD # LINE SEPARATOR..NARROW NO-BREAK SPACE +# 2030..2032 valid # PER MILLE SIGN..PRIME +2033 >2032 2032 # DOUBLE PRIME +2034 >2032 2032 2032 # TRIPLE PRIME +# 2035 valid # REVERSED PRIME +2036 >2035 2035 # REVERSED DOUBLE PRIME +2037 >2035 2035 2035 # REVERSED TRIPLE PRIME +# 2038..203B valid # CARET..REFERENCE MARK +203C >FFFD # DOUBLE EXCLAMATION MARK +# 203D valid # INTERROBANG +203E >FFFD # OVERLINE +# 203F..2046 valid # UNDERTIE..RIGHT SQUARE BRACKET WITH QUILL +2047..2049 >FFFD # DOUBLE QUESTION MARK..EXCLAMATION QUESTION MARK +# 204A..2056 valid # TIRONIAN SIGN ET..THREE DOT PUNCTUATION +2057 >2032 2032 2032 2032 # QUADRUPLE PRIME +# 2058..205E valid # FOUR DOT PUNCTUATION..VERTICAL FOUR DOTS +205F >FFFD # MEDIUM MATHEMATICAL SPACE +2060 > # WORD JOINER +2061..2063 >FFFD # FUNCTION APPLICATION..INVISIBLE SEPARATOR +2064 > # INVISIBLE PLUS +2065..2069 >FFFD # .. +206A..206F >FFFD # INHIBIT SYMMETRIC SWAPPING..NOMINAL DIGIT SHAPES +2070 >0030 # SUPERSCRIPT ZERO +2071 >0069 # SUPERSCRIPT LATIN SMALL LETTER I +2072..2073 >FFFD # .. +2074 >0034 # SUPERSCRIPT FOUR +2075 >0035 # SUPERSCRIPT FIVE +2076 >0036 # SUPERSCRIPT SIX +2077 >0037 # SUPERSCRIPT SEVEN +2078 >0038 # SUPERSCRIPT EIGHT +2079 >0039 # SUPERSCRIPT NINE +207A >FFFD # SUPERSCRIPT PLUS SIGN +207B >2212 # SUPERSCRIPT MINUS +207C..207E >FFFD # SUPERSCRIPT EQUALS SIGN..SUPERSCRIPT RIGHT PARENTHESIS +207F >006E # SUPERSCRIPT LATIN SMALL LETTER N +2080 >0030 # SUBSCRIPT ZERO +2081 >0031 # SUBSCRIPT ONE +2082 >0032 # SUBSCRIPT TWO +2083 >0033 # SUBSCRIPT THREE +2084 >0034 # SUBSCRIPT FOUR +2085 >0035 # SUBSCRIPT FIVE +2086 >0036 # SUBSCRIPT SIX +2087 >0037 # SUBSCRIPT SEVEN +2088 >0038 # SUBSCRIPT EIGHT +2089 >0039 # SUBSCRIPT NINE +208A >FFFD # SUBSCRIPT PLUS SIGN +208B >2212 # SUBSCRIPT MINUS +208C..208E >FFFD # SUBSCRIPT EQUALS SIGN..SUBSCRIPT RIGHT PARENTHESIS +208F >FFFD # +2090 >0061 # LATIN SUBSCRIPT SMALL LETTER A +2091 >0065 # LATIN SUBSCRIPT SMALL LETTER E +2092 >006F # LATIN SUBSCRIPT SMALL LETTER O +2093 >0078 # LATIN SUBSCRIPT SMALL LETTER X +2094 >0259 # LATIN SUBSCRIPT SMALL LETTER SCHWA +2095..209F >FFFD # .. +# 20A0..20A7 valid # EURO-CURRENCY SIGN..PESETA SIGN +20A8 >0072 0073 # RUPEE SIGN +# 20A9..20B8 valid # WON SIGN..TENGE SIGN +20B9..20CF >FFFD # .. +# 20D0..20F0 valid # COMBINING LEFT HARPOON ABOVE..COMBINING ASTERISK ABOVE +20F1..20FF >FFFD # .. +2100..2101 >FFFD # ACCOUNT OF..ADDRESSED TO THE SUBJECT +2102 >0063 # DOUBLE-STRUCK CAPITAL C +2103 >00B0 0063 # DEGREE CELSIUS +# 2104 valid # CENTRE LINE SYMBOL +2105..2106 >FFFD # CARE OF..CADA UNA +2107 >025B # EULER CONSTANT +# 2108 valid # SCRUPLE +2109 >00B0 0066 # DEGREE FAHRENHEIT +210A >0067 # SCRIPT SMALL G +210B..210E >0068 # SCRIPT CAPITAL H..PLANCK CONSTANT +210F >0127 # PLANCK CONSTANT OVER TWO PI +2110..2111 >0069 # SCRIPT CAPITAL I..BLACK-LETTER CAPITAL I +2112..2113 >006C # SCRIPT CAPITAL L..SCRIPT SMALL L +# 2114 valid # L B BAR SYMBOL +2115 >006E # DOUBLE-STRUCK CAPITAL N +2116 >006E 006F # NUMERO SIGN +# 2117..2118 valid # SOUND RECORDING COPYRIGHT..SCRIPT CAPITAL P +2119 >0070 # DOUBLE-STRUCK CAPITAL P +211A >0071 # DOUBLE-STRUCK CAPITAL Q +211B..211D >0072 # SCRIPT CAPITAL R..DOUBLE-STRUCK CAPITAL R +# 211E..211F valid # PRESCRIPTION TAKE..RESPONSE +2120 >0073 006D # SERVICE MARK +2121 >0074 0065 006C # TELEPHONE SIGN +2122 >0074 006D # TRADE MARK SIGN +# 2123 valid # VERSICLE +2124 >007A # DOUBLE-STRUCK CAPITAL Z +# 2125 valid # OUNCE SIGN +2126 >03C9 # OHM SIGN +# 2127 valid # INVERTED OHM SIGN +2128 >007A # BLACK-LETTER CAPITAL Z +# 2129 valid # TURNED GREEK SMALL LETTER IOTA +212A >006B # KELVIN SIGN +212B >00E5 # ANGSTROM SIGN +212C >0062 # SCRIPT CAPITAL B +212D >0063 # BLACK-LETTER CAPITAL C +# 212E valid # ESTIMATED SYMBOL +212F..2130 >0065 # SCRIPT SMALL E..SCRIPT CAPITAL E +2131 >0066 # SCRIPT CAPITAL F +2132 >FFFD # TURNED CAPITAL F +2133 >006D # SCRIPT CAPITAL M +2134 >006F # SCRIPT SMALL O +2135 >05D0 # ALEF SYMBOL +2136 >05D1 # BET SYMBOL +2137 >05D2 # GIMEL SYMBOL +2138 >05D3 # DALET SYMBOL +2139 >0069 # INFORMATION SOURCE +# 213A valid # ROTATED CAPITAL Q +213B >0066 0061 0078 # FACSIMILE SIGN +213C >03C0 # DOUBLE-STRUCK SMALL PI +213D..213E >03B3 # DOUBLE-STRUCK SMALL GAMMA..DOUBLE-STRUCK CAPITAL GAMMA +213F >03C0 # DOUBLE-STRUCK CAPITAL PI +2140 >2211 # DOUBLE-STRUCK N-ARY SUMMATION +# 2141..2144 valid # TURNED SANS-SERIF CAPITAL G..TURNED SANS-SERIF CAPITAL Y +2145..2146 >0064 # DOUBLE-STRUCK ITALIC CAPITAL D..DOUBLE-STRUCK ITALIC SMALL D +2147 >0065 # DOUBLE-STRUCK ITALIC SMALL E +2148 >0069 # DOUBLE-STRUCK ITALIC SMALL I +2149 >006A # DOUBLE-STRUCK ITALIC SMALL J +# 214A..214F valid # PROPERTY LINE..SYMBOL FOR SAMARITAN SOURCE +2150 >0031 2044 0037 # VULGAR FRACTION ONE SEVENTH +2151 >0031 2044 0039 # VULGAR FRACTION ONE NINTH +2152 >0031 2044 0031 0030 # VULGAR FRACTION ONE TENTH +2153 >0031 2044 0033 # VULGAR FRACTION ONE THIRD +2154 >0032 2044 0033 # VULGAR FRACTION TWO THIRDS +2155 >0031 2044 0035 # VULGAR FRACTION ONE FIFTH +2156 >0032 2044 0035 # VULGAR FRACTION TWO FIFTHS +2157 >0033 2044 0035 # VULGAR FRACTION THREE FIFTHS +2158 >0034 2044 0035 # VULGAR FRACTION FOUR FIFTHS +2159 >0031 2044 0036 # VULGAR FRACTION ONE SIXTH +215A >0035 2044 0036 # VULGAR FRACTION FIVE SIXTHS +215B >0031 2044 0038 # VULGAR FRACTION ONE EIGHTH +215C >0033 2044 0038 # VULGAR FRACTION THREE EIGHTHS +215D >0035 2044 0038 # VULGAR FRACTION FIVE EIGHTHS +215E >0037 2044 0038 # VULGAR FRACTION SEVEN EIGHTHS +215F >0031 2044 # FRACTION NUMERATOR ONE +2160 >0069 # ROMAN NUMERAL ONE +2161 >0069 0069 # ROMAN NUMERAL TWO +2162 >0069 0069 0069 # ROMAN NUMERAL THREE +2163 >0069 0076 # ROMAN NUMERAL FOUR +2164 >0076 # ROMAN NUMERAL FIVE +2165 >0076 0069 # ROMAN NUMERAL SIX +2166 >0076 0069 0069 # ROMAN NUMERAL SEVEN +2167 >0076 0069 0069 0069 # ROMAN NUMERAL EIGHT +2168 >0069 0078 # ROMAN NUMERAL NINE +2169 >0078 # ROMAN NUMERAL TEN +216A >0078 0069 # ROMAN NUMERAL ELEVEN +216B >0078 0069 0069 # ROMAN NUMERAL TWELVE +216C >006C # ROMAN NUMERAL FIFTY +216D >0063 # ROMAN NUMERAL ONE HUNDRED +216E >0064 # ROMAN NUMERAL FIVE HUNDRED +216F >006D # ROMAN NUMERAL ONE THOUSAND +2170 >0069 # SMALL ROMAN NUMERAL ONE +2171 >0069 0069 # SMALL ROMAN NUMERAL TWO +2172 >0069 0069 0069 # SMALL ROMAN NUMERAL THREE +2173 >0069 0076 # SMALL ROMAN NUMERAL FOUR +2174 >0076 # SMALL ROMAN NUMERAL FIVE +2175 >0076 0069 # SMALL ROMAN NUMERAL SIX +2176 >0076 0069 0069 # SMALL ROMAN NUMERAL SEVEN +2177 >0076 0069 0069 0069 # SMALL ROMAN NUMERAL EIGHT +2178 >0069 0078 # SMALL ROMAN NUMERAL NINE +2179 >0078 # SMALL ROMAN NUMERAL TEN +217A >0078 0069 # SMALL ROMAN NUMERAL ELEVEN +217B >0078 0069 0069 # SMALL ROMAN NUMERAL TWELVE +217C >006C # SMALL ROMAN NUMERAL FIFTY +217D >0063 # SMALL ROMAN NUMERAL ONE HUNDRED +217E >0064 # SMALL ROMAN NUMERAL FIVE HUNDRED +217F >006D # SMALL ROMAN NUMERAL ONE THOUSAND +# 2180..2182 valid # ROMAN NUMERAL ONE THOUSAND C D..ROMAN NUMERAL TEN THOUSAND +2183 >FFFD # ROMAN NUMERAL REVERSED ONE HUNDRED +# 2184..2188 valid # LATIN SMALL LETTER REVERSED C..ROMAN NUMERAL ONE HUNDRED THOUSAND +2189 >0030 2044 0033 # VULGAR FRACTION ZERO THIRDS +218A..218F >FFFD # .. +# 2190..222B valid # LEFTWARDS ARROW..INTEGRAL +222C >222B 222B # DOUBLE INTEGRAL +222D >222B 222B 222B # TRIPLE INTEGRAL +# 222E valid # CONTOUR INTEGRAL +222F >222E 222E # SURFACE INTEGRAL +2230 >222E 222E 222E # VOLUME INTEGRAL +# 2231..225F valid # CLOCKWISE INTEGRAL..QUESTIONED EQUAL TO +2260 >FFFD # NOT EQUAL TO +# 2261..226D valid # IDENTICAL TO..NOT EQUIVALENT TO +226E..226F >FFFD # NOT LESS-THAN..NOT GREATER-THAN +# 2270..2328 valid # NEITHER LESS-THAN NOR EQUAL TO..KEYBOARD +2329 >3008 # LEFT-POINTING ANGLE BRACKET +232A >3009 # RIGHT-POINTING ANGLE BRACKET +# 232B..23E8 valid # ERASE TO THE LEFT..DECIMAL EXPONENT SYMBOL +23E9..23FF >FFFD # .. +# 2400..2426 valid # SYMBOL FOR NULL..SYMBOL FOR SUBSTITUTE FORM TWO +2427..243F >FFFD # .. +# 2440..244A valid # OCR HOOK..OCR DOUBLE BACKSLASH +244B..245F >FFFD # .. +2460 >0031 # CIRCLED DIGIT ONE +2461 >0032 # CIRCLED DIGIT TWO +2462 >0033 # CIRCLED DIGIT THREE +2463 >0034 # CIRCLED DIGIT FOUR +2464 >0035 # CIRCLED DIGIT FIVE +2465 >0036 # CIRCLED DIGIT SIX +2466 >0037 # CIRCLED DIGIT SEVEN +2467 >0038 # CIRCLED DIGIT EIGHT +2468 >0039 # CIRCLED DIGIT NINE +2469 >0031 0030 # CIRCLED NUMBER TEN +246A >0031 0031 # CIRCLED NUMBER ELEVEN +246B >0031 0032 # CIRCLED NUMBER TWELVE +246C >0031 0033 # CIRCLED NUMBER THIRTEEN +246D >0031 0034 # CIRCLED NUMBER FOURTEEN +246E >0031 0035 # CIRCLED NUMBER FIFTEEN +246F >0031 0036 # CIRCLED NUMBER SIXTEEN +2470 >0031 0037 # CIRCLED NUMBER SEVENTEEN +2471 >0031 0038 # CIRCLED NUMBER EIGHTEEN +2472 >0031 0039 # CIRCLED NUMBER NINETEEN +2473 >0032 0030 # CIRCLED NUMBER TWENTY +2474..24B5 >FFFD # PARENTHESIZED DIGIT ONE..PARENTHESIZED LATIN SMALL LETTER Z +24B6 >0061 # CIRCLED LATIN CAPITAL LETTER A +24B7 >0062 # CIRCLED LATIN CAPITAL LETTER B +24B8 >0063 # CIRCLED LATIN CAPITAL LETTER C +24B9 >0064 # CIRCLED LATIN CAPITAL LETTER D +24BA >0065 # CIRCLED LATIN CAPITAL LETTER E +24BB >0066 # CIRCLED LATIN CAPITAL LETTER F +24BC >0067 # CIRCLED LATIN CAPITAL LETTER G +24BD >0068 # CIRCLED LATIN CAPITAL LETTER H +24BE >0069 # CIRCLED LATIN CAPITAL LETTER I +24BF >006A # CIRCLED LATIN CAPITAL LETTER J +24C0 >006B # CIRCLED LATIN CAPITAL LETTER K +24C1 >006C # CIRCLED LATIN CAPITAL LETTER L +24C2 >006D # CIRCLED LATIN CAPITAL LETTER M +24C3 >006E # CIRCLED LATIN CAPITAL LETTER N +24C4 >006F # CIRCLED LATIN CAPITAL LETTER O +24C5 >0070 # CIRCLED LATIN CAPITAL LETTER P +24C6 >0071 # CIRCLED LATIN CAPITAL LETTER Q +24C7 >0072 # CIRCLED LATIN CAPITAL LETTER R +24C8 >0073 # CIRCLED LATIN CAPITAL LETTER S +24C9 >0074 # CIRCLED LATIN CAPITAL LETTER T +24CA >0075 # CIRCLED LATIN CAPITAL LETTER U +24CB >0076 # CIRCLED LATIN CAPITAL LETTER V +24CC >0077 # CIRCLED LATIN CAPITAL LETTER W +24CD >0078 # CIRCLED LATIN CAPITAL LETTER X +24CE >0079 # CIRCLED LATIN CAPITAL LETTER Y +24CF >007A # CIRCLED LATIN CAPITAL LETTER Z +24D0 >0061 # CIRCLED LATIN SMALL LETTER A +24D1 >0062 # CIRCLED LATIN SMALL LETTER B +24D2 >0063 # CIRCLED LATIN SMALL LETTER C +24D3 >0064 # CIRCLED LATIN SMALL LETTER D +24D4 >0065 # CIRCLED LATIN SMALL LETTER E +24D5 >0066 # CIRCLED LATIN SMALL LETTER F +24D6 >0067 # CIRCLED LATIN SMALL LETTER G +24D7 >0068 # CIRCLED LATIN SMALL LETTER H +24D8 >0069 # CIRCLED LATIN SMALL LETTER I +24D9 >006A # CIRCLED LATIN SMALL LETTER J +24DA >006B # CIRCLED LATIN SMALL LETTER K +24DB >006C # CIRCLED LATIN SMALL LETTER L +24DC >006D # CIRCLED LATIN SMALL LETTER M +24DD >006E # CIRCLED LATIN SMALL LETTER N +24DE >006F # CIRCLED LATIN SMALL LETTER O +24DF >0070 # CIRCLED LATIN SMALL LETTER P +24E0 >0071 # CIRCLED LATIN SMALL LETTER Q +24E1 >0072 # CIRCLED LATIN SMALL LETTER R +24E2 >0073 # CIRCLED LATIN SMALL LETTER S +24E3 >0074 # CIRCLED LATIN SMALL LETTER T +24E4 >0075 # CIRCLED LATIN SMALL LETTER U +24E5 >0076 # CIRCLED LATIN SMALL LETTER V +24E6 >0077 # CIRCLED LATIN SMALL LETTER W +24E7 >0078 # CIRCLED LATIN SMALL LETTER X +24E8 >0079 # CIRCLED LATIN SMALL LETTER Y +24E9 >007A # CIRCLED LATIN SMALL LETTER Z +24EA >0030 # CIRCLED DIGIT ZERO +# 24EB..26CD valid # NEGATIVE CIRCLED NUMBER ELEVEN..DISABLED CAR +26CE >FFFD # +# 26CF..26E1 valid # PICK..RESTRICTED LEFT ENTRY-2 +26E2 >FFFD # +# 26E3 valid # HEAVY CIRCLE WITH STROKE AND TWO DOTS ABOVE +26E4..26E7 >FFFD # .. +# 26E8..26FF valid # BLACK CROSS ON SHIELD..WHITE FLAG WITH HORIZONTAL MIDDLE BLACK STRIPE +2700 >FFFD # +# 2701..2704 valid # UPPER BLADE SCISSORS..WHITE SCISSORS +2705 >FFFD # +# 2706..2709 valid # TELEPHONE LOCATION SIGN..ENVELOPE +270A..270B >FFFD # .. +# 270C..2727 valid # VICTORY HAND..WHITE FOUR POINTED STAR +2728 >FFFD # +# 2729..274B valid # STRESS OUTLINED WHITE STAR..HEAVY EIGHT TEARDROP-SPOKED PROPELLER ASTERISK +274C >FFFD # +# 274D valid # SHADOWED WHITE CIRCLE +274E >FFFD # +# 274F..2752 valid # LOWER RIGHT DROP-SHADOWED WHITE SQUARE..UPPER RIGHT SHADOWED WHITE SQUARE +2753..2755 >FFFD # .. +# 2756..275E valid # BLACK DIAMOND MINUS WHITE X..HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT +275F..2760 >FFFD # .. +# 2761..2794 valid # CURVED STEM PARAGRAPH SIGN ORNAMENT..HEAVY WIDE-HEADED RIGHTWARDS ARROW +2795..2797 >FFFD # .. +# 2798..27AF valid # HEAVY SOUTH EAST ARROW..NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW +27B0 >FFFD # +# 27B1..27BE valid # NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW..OPEN-OUTLINED RIGHTWARDS ARROW +27BF >FFFD # +# 27C0..27CA valid # THREE DIMENSIONAL ANGLE..VERTICAL BAR WITH HORIZONTAL STROKE +27CB >FFFD # +# 27CC valid # LONG DIVISION +27CD..27CF >FFFD # .. +# 27D0..2A0B valid # WHITE DIAMOND WITH CENTRED DOT..SUMMATION WITH INTEGRAL +2A0C >222B 222B 222B 222B # QUADRUPLE INTEGRAL OPERATOR +# 2A0D..2A73 valid # FINITE PART INTEGRAL..EQUALS SIGN ABOVE TILDE OPERATOR +2A74..2A76 >FFFD # DOUBLE COLON EQUAL..THREE CONSECUTIVE EQUALS SIGNS +# 2A77..2ADB valid # EQUALS SIGN WITH TWO DOTS ABOVE AND TWO DOTS BELOW..TRANSVERSAL INTERSECTION +2ADC >2ADD 0338 # FORKING +# 2ADD..2B4C valid # NONFORKING..RIGHTWARDS ARROW ABOVE REVERSE TILDE OPERATOR +2B4D..2B4F >FFFD # .. +# 2B50..2B59 valid # WHITE MEDIUM STAR..HEAVY CIRCLED SALTIRE +2B5A..2BFF >FFFD # .. +2C00 >2C30 # GLAGOLITIC CAPITAL LETTER AZU +2C01 >2C31 # GLAGOLITIC CAPITAL LETTER BUKY +2C02 >2C32 # GLAGOLITIC CAPITAL LETTER VEDE +2C03 >2C33 # GLAGOLITIC CAPITAL LETTER GLAGOLI +2C04 >2C34 # GLAGOLITIC CAPITAL LETTER DOBRO +2C05 >2C35 # GLAGOLITIC CAPITAL LETTER YESTU +2C06 >2C36 # GLAGOLITIC CAPITAL LETTER ZHIVETE +2C07 >2C37 # GLAGOLITIC CAPITAL LETTER DZELO +2C08 >2C38 # GLAGOLITIC CAPITAL LETTER ZEMLJA +2C09 >2C39 # GLAGOLITIC CAPITAL LETTER IZHE +2C0A >2C3A # GLAGOLITIC CAPITAL LETTER INITIAL IZHE +2C0B >2C3B # GLAGOLITIC CAPITAL LETTER I +2C0C >2C3C # GLAGOLITIC CAPITAL LETTER DJERVI +2C0D >2C3D # GLAGOLITIC CAPITAL LETTER KAKO +2C0E >2C3E # GLAGOLITIC CAPITAL LETTER LJUDIJE +2C0F >2C3F # GLAGOLITIC CAPITAL LETTER MYSLITE +2C10 >2C40 # GLAGOLITIC CAPITAL LETTER NASHI +2C11 >2C41 # GLAGOLITIC CAPITAL LETTER ONU +2C12 >2C42 # GLAGOLITIC CAPITAL LETTER POKOJI +2C13 >2C43 # GLAGOLITIC CAPITAL LETTER RITSI +2C14 >2C44 # GLAGOLITIC CAPITAL LETTER SLOVO +2C15 >2C45 # GLAGOLITIC CAPITAL LETTER TVRIDO +2C16 >2C46 # GLAGOLITIC CAPITAL LETTER UKU +2C17 >2C47 # GLAGOLITIC CAPITAL LETTER FRITU +2C18 >2C48 # GLAGOLITIC CAPITAL LETTER HERU +2C19 >2C49 # GLAGOLITIC CAPITAL LETTER OTU +2C1A >2C4A # GLAGOLITIC CAPITAL LETTER PE +2C1B >2C4B # GLAGOLITIC CAPITAL LETTER SHTA +2C1C >2C4C # GLAGOLITIC CAPITAL LETTER TSI +2C1D >2C4D # GLAGOLITIC CAPITAL LETTER CHRIVI +2C1E >2C4E # GLAGOLITIC CAPITAL LETTER SHA +2C1F >2C4F # GLAGOLITIC CAPITAL LETTER YERU +2C20 >2C50 # GLAGOLITIC CAPITAL LETTER YERI +2C21 >2C51 # GLAGOLITIC CAPITAL LETTER YATI +2C22 >2C52 # GLAGOLITIC CAPITAL LETTER SPIDERY HA +2C23 >2C53 # GLAGOLITIC CAPITAL LETTER YU +2C24 >2C54 # GLAGOLITIC CAPITAL LETTER SMALL YUS +2C25 >2C55 # GLAGOLITIC CAPITAL LETTER SMALL YUS WITH TAIL +2C26 >2C56 # GLAGOLITIC CAPITAL LETTER YO +2C27 >2C57 # GLAGOLITIC CAPITAL LETTER IOTATED SMALL YUS +2C28 >2C58 # GLAGOLITIC CAPITAL LETTER BIG YUS +2C29 >2C59 # GLAGOLITIC CAPITAL LETTER IOTATED BIG YUS +2C2A >2C5A # GLAGOLITIC CAPITAL LETTER FITA +2C2B >2C5B # GLAGOLITIC CAPITAL LETTER IZHITSA +2C2C >2C5C # GLAGOLITIC CAPITAL LETTER SHTAPIC +2C2D >2C5D # GLAGOLITIC CAPITAL LETTER TROKUTASTI A +2C2E >2C5E # GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE +2C2F >FFFD # +# 2C30..2C5E valid # GLAGOLITIC SMALL LETTER AZU..GLAGOLITIC SMALL LETTER LATINATE MYSLITE +2C5F >FFFD # +2C60 >2C61 # LATIN CAPITAL LETTER L WITH DOUBLE BAR +# 2C61 valid # LATIN SMALL LETTER L WITH DOUBLE BAR +2C62 >026B # LATIN CAPITAL LETTER L WITH MIDDLE TILDE +2C63 >1D7D # LATIN CAPITAL LETTER P WITH STROKE +2C64 >027D # LATIN CAPITAL LETTER R WITH TAIL +# 2C65..2C66 valid # LATIN SMALL LETTER A WITH STROKE..LATIN SMALL LETTER T WITH DIAGONAL STROKE +2C67 >2C68 # LATIN CAPITAL LETTER H WITH DESCENDER +# 2C68 valid # LATIN SMALL LETTER H WITH DESCENDER +2C69 >2C6A # LATIN CAPITAL LETTER K WITH DESCENDER +# 2C6A valid # LATIN SMALL LETTER K WITH DESCENDER +2C6B >2C6C # LATIN CAPITAL LETTER Z WITH DESCENDER +# 2C6C valid # LATIN SMALL LETTER Z WITH DESCENDER +2C6D >0251 # LATIN CAPITAL LETTER ALPHA +2C6E >0271 # LATIN CAPITAL LETTER M WITH HOOK +2C6F >0250 # LATIN CAPITAL LETTER TURNED A +2C70 >0252 # LATIN CAPITAL LETTER TURNED ALPHA +# 2C71 valid # LATIN SMALL LETTER V WITH RIGHT HOOK +2C72 >2C73 # LATIN CAPITAL LETTER W WITH HOOK +# 2C73..2C74 valid # LATIN SMALL LETTER W WITH HOOK..LATIN SMALL LETTER V WITH CURL +2C75 >2C76 # LATIN CAPITAL LETTER HALF H +# 2C76..2C7B valid # LATIN SMALL LETTER HALF H..LATIN LETTER SMALL CAPITAL TURNED E +2C7C >006A # LATIN SUBSCRIPT SMALL LETTER J +2C7D >0076 # MODIFIER LETTER CAPITAL V +2C7E >023F # LATIN CAPITAL LETTER S WITH SWASH TAIL +2C7F >0240 # LATIN CAPITAL LETTER Z WITH SWASH TAIL +2C80 >2C81 # COPTIC CAPITAL LETTER ALFA +# 2C81 valid # COPTIC SMALL LETTER ALFA +2C82 >2C83 # COPTIC CAPITAL LETTER VIDA +# 2C83 valid # COPTIC SMALL LETTER VIDA +2C84 >2C85 # COPTIC CAPITAL LETTER GAMMA +# 2C85 valid # COPTIC SMALL LETTER GAMMA +2C86 >2C87 # COPTIC CAPITAL LETTER DALDA +# 2C87 valid # COPTIC SMALL LETTER DALDA +2C88 >2C89 # COPTIC CAPITAL LETTER EIE +# 2C89 valid # COPTIC SMALL LETTER EIE +2C8A >2C8B # COPTIC CAPITAL LETTER SOU +# 2C8B valid # COPTIC SMALL LETTER SOU +2C8C >2C8D # COPTIC CAPITAL LETTER ZATA +# 2C8D valid # COPTIC SMALL LETTER ZATA +2C8E >2C8F # COPTIC CAPITAL LETTER HATE +# 2C8F valid # COPTIC SMALL LETTER HATE +2C90 >2C91 # COPTIC CAPITAL LETTER THETHE +# 2C91 valid # COPTIC SMALL LETTER THETHE +2C92 >2C93 # COPTIC CAPITAL LETTER IAUDA +# 2C93 valid # COPTIC SMALL LETTER IAUDA +2C94 >2C95 # COPTIC CAPITAL LETTER KAPA +# 2C95 valid # COPTIC SMALL LETTER KAPA +2C96 >2C97 # COPTIC CAPITAL LETTER LAULA +# 2C97 valid # COPTIC SMALL LETTER LAULA +2C98 >2C99 # COPTIC CAPITAL LETTER MI +# 2C99 valid # COPTIC SMALL LETTER MI +2C9A >2C9B # COPTIC CAPITAL LETTER NI +# 2C9B valid # COPTIC SMALL LETTER NI +2C9C >2C9D # COPTIC CAPITAL LETTER KSI +# 2C9D valid # COPTIC SMALL LETTER KSI +2C9E >2C9F # COPTIC CAPITAL LETTER O +# 2C9F valid # COPTIC SMALL LETTER O +2CA0 >2CA1 # COPTIC CAPITAL LETTER PI +# 2CA1 valid # COPTIC SMALL LETTER PI +2CA2 >2CA3 # COPTIC CAPITAL LETTER RO +# 2CA3 valid # COPTIC SMALL LETTER RO +2CA4 >2CA5 # COPTIC CAPITAL LETTER SIMA +# 2CA5 valid # COPTIC SMALL LETTER SIMA +2CA6 >2CA7 # COPTIC CAPITAL LETTER TAU +# 2CA7 valid # COPTIC SMALL LETTER TAU +2CA8 >2CA9 # COPTIC CAPITAL LETTER UA +# 2CA9 valid # COPTIC SMALL LETTER UA +2CAA >2CAB # COPTIC CAPITAL LETTER FI +# 2CAB valid # COPTIC SMALL LETTER FI +2CAC >2CAD # COPTIC CAPITAL LETTER KHI +# 2CAD valid # COPTIC SMALL LETTER KHI +2CAE >2CAF # COPTIC CAPITAL LETTER PSI +# 2CAF valid # COPTIC SMALL LETTER PSI +2CB0 >2CB1 # COPTIC CAPITAL LETTER OOU +# 2CB1 valid # COPTIC SMALL LETTER OOU +2CB2 >2CB3 # COPTIC CAPITAL LETTER DIALECT-P ALEF +# 2CB3 valid # COPTIC SMALL LETTER DIALECT-P ALEF +2CB4 >2CB5 # COPTIC CAPITAL LETTER OLD COPTIC AIN +# 2CB5 valid # COPTIC SMALL LETTER OLD COPTIC AIN +2CB6 >2CB7 # COPTIC CAPITAL LETTER CRYPTOGRAMMIC EIE +# 2CB7 valid # COPTIC SMALL LETTER CRYPTOGRAMMIC EIE +2CB8 >2CB9 # COPTIC CAPITAL LETTER DIALECT-P KAPA +# 2CB9 valid # COPTIC SMALL LETTER DIALECT-P KAPA +2CBA >2CBB # COPTIC CAPITAL LETTER DIALECT-P NI +# 2CBB valid # COPTIC SMALL LETTER DIALECT-P NI +2CBC >2CBD # COPTIC CAPITAL LETTER CRYPTOGRAMMIC NI +# 2CBD valid # COPTIC SMALL LETTER CRYPTOGRAMMIC NI +2CBE >2CBF # COPTIC CAPITAL LETTER OLD COPTIC OOU +# 2CBF valid # COPTIC SMALL LETTER OLD COPTIC OOU +2CC0 >2CC1 # COPTIC CAPITAL LETTER SAMPI +# 2CC1 valid # COPTIC SMALL LETTER SAMPI +2CC2 >2CC3 # COPTIC CAPITAL LETTER CROSSED SHEI +# 2CC3 valid # COPTIC SMALL LETTER CROSSED SHEI +2CC4 >2CC5 # COPTIC CAPITAL LETTER OLD COPTIC SHEI +# 2CC5 valid # COPTIC SMALL LETTER OLD COPTIC SHEI +2CC6 >2CC7 # COPTIC CAPITAL LETTER OLD COPTIC ESH +# 2CC7 valid # COPTIC SMALL LETTER OLD COPTIC ESH +2CC8 >2CC9 # COPTIC CAPITAL LETTER AKHMIMIC KHEI +# 2CC9 valid # COPTIC SMALL LETTER AKHMIMIC KHEI +2CCA >2CCB # COPTIC CAPITAL LETTER DIALECT-P HORI +# 2CCB valid # COPTIC SMALL LETTER DIALECT-P HORI +2CCC >2CCD # COPTIC CAPITAL LETTER OLD COPTIC HORI +# 2CCD valid # COPTIC SMALL LETTER OLD COPTIC HORI +2CCE >2CCF # COPTIC CAPITAL LETTER OLD COPTIC HA +# 2CCF valid # COPTIC SMALL LETTER OLD COPTIC HA +2CD0 >2CD1 # COPTIC CAPITAL LETTER L-SHAPED HA +# 2CD1 valid # COPTIC SMALL LETTER L-SHAPED HA +2CD2 >2CD3 # COPTIC CAPITAL LETTER OLD COPTIC HEI +# 2CD3 valid # COPTIC SMALL LETTER OLD COPTIC HEI +2CD4 >2CD5 # COPTIC CAPITAL LETTER OLD COPTIC HAT +# 2CD5 valid # COPTIC SMALL LETTER OLD COPTIC HAT +2CD6 >2CD7 # COPTIC CAPITAL LETTER OLD COPTIC GANGIA +# 2CD7 valid # COPTIC SMALL LETTER OLD COPTIC GANGIA +2CD8 >2CD9 # COPTIC CAPITAL LETTER OLD COPTIC DJA +# 2CD9 valid # COPTIC SMALL LETTER OLD COPTIC DJA +2CDA >2CDB # COPTIC CAPITAL LETTER OLD COPTIC SHIMA +# 2CDB valid # COPTIC SMALL LETTER OLD COPTIC SHIMA +2CDC >2CDD # COPTIC CAPITAL LETTER OLD NUBIAN SHIMA +# 2CDD valid # COPTIC SMALL LETTER OLD NUBIAN SHIMA +2CDE >2CDF # COPTIC CAPITAL LETTER OLD NUBIAN NGI +# 2CDF valid # COPTIC SMALL LETTER OLD NUBIAN NGI +2CE0 >2CE1 # COPTIC CAPITAL LETTER OLD NUBIAN NYI +# 2CE1 valid # COPTIC SMALL LETTER OLD NUBIAN NYI +2CE2 >2CE3 # COPTIC CAPITAL LETTER OLD NUBIAN WAU +# 2CE3..2CEA valid # COPTIC SMALL LETTER OLD NUBIAN WAU..COPTIC SYMBOL SHIMA SIMA +2CEB >2CEC # COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI +# 2CEC valid # COPTIC SMALL LETTER CRYPTOGRAMMIC SHEI +2CED >2CEE # COPTIC CAPITAL LETTER CRYPTOGRAMMIC GANGIA +# 2CEE..2CF1 valid # COPTIC SMALL LETTER CRYPTOGRAMMIC GANGIA..COPTIC COMBINING SPIRITUS LENIS +2CF2..2CF8 >FFFD # .. +# 2CF9..2D25 valid # COPTIC OLD NUBIAN FULL STOP..GEORGIAN SMALL LETTER HOE +2D26..2D2F >FFFD # .. +# 2D30..2D65 valid # TIFINAGH LETTER YA..TIFINAGH LETTER YAZZ +2D66..2D6E >FFFD # .. +2D6F >2D61 # TIFINAGH MODIFIER LETTER LABIALIZATION MARK +2D70..2D7F >FFFD # .. +# 2D80..2D96 valid # ETHIOPIC SYLLABLE LOA..ETHIOPIC SYLLABLE GGWE +2D97..2D9F >FFFD # .. +# 2DA0..2DA6 valid # ETHIOPIC SYLLABLE SSA..ETHIOPIC SYLLABLE SSO +2DA7 >FFFD # +# 2DA8..2DAE valid # ETHIOPIC SYLLABLE CCA..ETHIOPIC SYLLABLE CCO +2DAF >FFFD # +# 2DB0..2DB6 valid # ETHIOPIC SYLLABLE ZZA..ETHIOPIC SYLLABLE ZZO +2DB7 >FFFD # +# 2DB8..2DBE valid # ETHIOPIC SYLLABLE CCHA..ETHIOPIC SYLLABLE CCHO +2DBF >FFFD # +# 2DC0..2DC6 valid # ETHIOPIC SYLLABLE QYA..ETHIOPIC SYLLABLE QYO +2DC7 >FFFD # +# 2DC8..2DCE valid # ETHIOPIC SYLLABLE KYA..ETHIOPIC SYLLABLE KYO +2DCF >FFFD # +# 2DD0..2DD6 valid # ETHIOPIC SYLLABLE XYA..ETHIOPIC SYLLABLE XYO +2DD7 >FFFD # +# 2DD8..2DDE valid # ETHIOPIC SYLLABLE GYA..ETHIOPIC SYLLABLE GYO +2DDF >FFFD # +# 2DE0..2E31 valid # COMBINING CYRILLIC LETTER BE..WORD SEPARATOR MIDDLE DOT +2E32..2E7F >FFFD # .. +# 2E80..2E99 valid # CJK RADICAL REPEAT..CJK RADICAL RAP +2E9A >FFFD # +# 2E9B..2E9E valid # CJK RADICAL CHOKE..CJK RADICAL DEATH +2E9F >6BCD # CJK RADICAL MOTHER +# 2EA0..2EF2 valid # CJK RADICAL CIVILIAN..CJK RADICAL J-SIMPLIFIED TURTLE +2EF3 >9F9F # CJK RADICAL C-SIMPLIFIED TURTLE +2EF4..2EFF >FFFD # .. +2F00 >4E00 # KANGXI RADICAL ONE +2F01 >4E28 # KANGXI RADICAL LINE +2F02 >4E36 # KANGXI RADICAL DOT +2F03 >4E3F # KANGXI RADICAL SLASH +2F04 >4E59 # KANGXI RADICAL SECOND +2F05 >4E85 # KANGXI RADICAL HOOK +2F06 >4E8C # KANGXI RADICAL TWO +2F07 >4EA0 # KANGXI RADICAL LID +2F08 >4EBA # KANGXI RADICAL MAN +2F09 >513F # KANGXI RADICAL LEGS +2F0A >5165 # KANGXI RADICAL ENTER +2F0B >516B # KANGXI RADICAL EIGHT +2F0C >5182 # KANGXI RADICAL DOWN BOX +2F0D >5196 # KANGXI RADICAL COVER +2F0E >51AB # KANGXI RADICAL ICE +2F0F >51E0 # KANGXI RADICAL TABLE +2F10 >51F5 # KANGXI RADICAL OPEN BOX +2F11 >5200 # KANGXI RADICAL KNIFE +2F12 >529B # KANGXI RADICAL POWER +2F13 >52F9 # KANGXI RADICAL WRAP +2F14 >5315 # KANGXI RADICAL SPOON +2F15 >531A # KANGXI RADICAL RIGHT OPEN BOX +2F16 >5338 # KANGXI RADICAL HIDING ENCLOSURE +2F17 >5341 # KANGXI RADICAL TEN +2F18 >535C # KANGXI RADICAL DIVINATION +2F19 >5369 # KANGXI RADICAL SEAL +2F1A >5382 # KANGXI RADICAL CLIFF +2F1B >53B6 # KANGXI RADICAL PRIVATE +2F1C >53C8 # KANGXI RADICAL AGAIN +2F1D >53E3 # KANGXI RADICAL MOUTH +2F1E >56D7 # KANGXI RADICAL ENCLOSURE +2F1F >571F # KANGXI RADICAL EARTH +2F20 >58EB # KANGXI RADICAL SCHOLAR +2F21 >5902 # KANGXI RADICAL GO +2F22 >590A # KANGXI RADICAL GO SLOWLY +2F23 >5915 # KANGXI RADICAL EVENING +2F24 >5927 # KANGXI RADICAL BIG +2F25 >5973 # KANGXI RADICAL WOMAN +2F26 >5B50 # KANGXI RADICAL CHILD +2F27 >5B80 # KANGXI RADICAL ROOF +2F28 >5BF8 # KANGXI RADICAL INCH +2F29 >5C0F # KANGXI RADICAL SMALL +2F2A >5C22 # KANGXI RADICAL LAME +2F2B >5C38 # KANGXI RADICAL CORPSE +2F2C >5C6E # KANGXI RADICAL SPROUT +2F2D >5C71 # KANGXI RADICAL MOUNTAIN +2F2E >5DDB # KANGXI RADICAL RIVER +2F2F >5DE5 # KANGXI RADICAL WORK +2F30 >5DF1 # KANGXI RADICAL ONESELF +2F31 >5DFE # KANGXI RADICAL TURBAN +2F32 >5E72 # KANGXI RADICAL DRY +2F33 >5E7A # KANGXI RADICAL SHORT THREAD +2F34 >5E7F # KANGXI RADICAL DOTTED CLIFF +2F35 >5EF4 # KANGXI RADICAL LONG STRIDE +2F36 >5EFE # KANGXI RADICAL TWO HANDS +2F37 >5F0B # KANGXI RADICAL SHOOT +2F38 >5F13 # KANGXI RADICAL BOW +2F39 >5F50 # KANGXI RADICAL SNOUT +2F3A >5F61 # KANGXI RADICAL BRISTLE +2F3B >5F73 # KANGXI RADICAL STEP +2F3C >5FC3 # KANGXI RADICAL HEART +2F3D >6208 # KANGXI RADICAL HALBERD +2F3E >6236 # KANGXI RADICAL DOOR +2F3F >624B # KANGXI RADICAL HAND +2F40 >652F # KANGXI RADICAL BRANCH +2F41 >6534 # KANGXI RADICAL RAP +2F42 >6587 # KANGXI RADICAL SCRIPT +2F43 >6597 # KANGXI RADICAL DIPPER +2F44 >65A4 # KANGXI RADICAL AXE +2F45 >65B9 # KANGXI RADICAL SQUARE +2F46 >65E0 # KANGXI RADICAL NOT +2F47 >65E5 # KANGXI RADICAL SUN +2F48 >66F0 # KANGXI RADICAL SAY +2F49 >6708 # KANGXI RADICAL MOON +2F4A >6728 # KANGXI RADICAL TREE +2F4B >6B20 # KANGXI RADICAL LACK +2F4C >6B62 # KANGXI RADICAL STOP +2F4D >6B79 # KANGXI RADICAL DEATH +2F4E >6BB3 # KANGXI RADICAL WEAPON +2F4F >6BCB # KANGXI RADICAL DO NOT +2F50 >6BD4 # KANGXI RADICAL COMPARE +2F51 >6BDB # KANGXI RADICAL FUR +2F52 >6C0F # KANGXI RADICAL CLAN +2F53 >6C14 # KANGXI RADICAL STEAM +2F54 >6C34 # KANGXI RADICAL WATER +2F55 >706B # KANGXI RADICAL FIRE +2F56 >722A # KANGXI RADICAL CLAW +2F57 >7236 # KANGXI RADICAL FATHER +2F58 >723B # KANGXI RADICAL DOUBLE X +2F59 >723F # KANGXI RADICAL HALF TREE TRUNK +2F5A >7247 # KANGXI RADICAL SLICE +2F5B >7259 # KANGXI RADICAL FANG +2F5C >725B # KANGXI RADICAL COW +2F5D >72AC # KANGXI RADICAL DOG +2F5E >7384 # KANGXI RADICAL PROFOUND +2F5F >7389 # KANGXI RADICAL JADE +2F60 >74DC # KANGXI RADICAL MELON +2F61 >74E6 # KANGXI RADICAL TILE +2F62 >7518 # KANGXI RADICAL SWEET +2F63 >751F # KANGXI RADICAL LIFE +2F64 >7528 # KANGXI RADICAL USE +2F65 >7530 # KANGXI RADICAL FIELD +2F66 >758B # KANGXI RADICAL BOLT OF CLOTH +2F67 >7592 # KANGXI RADICAL SICKNESS +2F68 >7676 # KANGXI RADICAL DOTTED TENT +2F69 >767D # KANGXI RADICAL WHITE +2F6A >76AE # KANGXI RADICAL SKIN +2F6B >76BF # KANGXI RADICAL DISH +2F6C >76EE # KANGXI RADICAL EYE +2F6D >77DB # KANGXI RADICAL SPEAR +2F6E >77E2 # KANGXI RADICAL ARROW +2F6F >77F3 # KANGXI RADICAL STONE +2F70 >793A # KANGXI RADICAL SPIRIT +2F71 >79B8 # KANGXI RADICAL TRACK +2F72 >79BE # KANGXI RADICAL GRAIN +2F73 >7A74 # KANGXI RADICAL CAVE +2F74 >7ACB # KANGXI RADICAL STAND +2F75 >7AF9 # KANGXI RADICAL BAMBOO +2F76 >7C73 # KANGXI RADICAL RICE +2F77 >7CF8 # KANGXI RADICAL SILK +2F78 >7F36 # KANGXI RADICAL JAR +2F79 >7F51 # KANGXI RADICAL NET +2F7A >7F8A # KANGXI RADICAL SHEEP +2F7B >7FBD # KANGXI RADICAL FEATHER +2F7C >8001 # KANGXI RADICAL OLD +2F7D >800C # KANGXI RADICAL AND +2F7E >8012 # KANGXI RADICAL PLOW +2F7F >8033 # KANGXI RADICAL EAR +2F80 >807F # KANGXI RADICAL BRUSH +2F81 >8089 # KANGXI RADICAL MEAT +2F82 >81E3 # KANGXI RADICAL MINISTER +2F83 >81EA # KANGXI RADICAL SELF +2F84 >81F3 # KANGXI RADICAL ARRIVE +2F85 >81FC # KANGXI RADICAL MORTAR +2F86 >820C # KANGXI RADICAL TONGUE +2F87 >821B # KANGXI RADICAL OPPOSE +2F88 >821F # KANGXI RADICAL BOAT +2F89 >826E # KANGXI RADICAL STOPPING +2F8A >8272 # KANGXI RADICAL COLOR +2F8B >8278 # KANGXI RADICAL GRASS +2F8C >864D # KANGXI RADICAL TIGER +2F8D >866B # KANGXI RADICAL INSECT +2F8E >8840 # KANGXI RADICAL BLOOD +2F8F >884C # KANGXI RADICAL WALK ENCLOSURE +2F90 >8863 # KANGXI RADICAL CLOTHES +2F91 >897E # KANGXI RADICAL WEST +2F92 >898B # KANGXI RADICAL SEE +2F93 >89D2 # KANGXI RADICAL HORN +2F94 >8A00 # KANGXI RADICAL SPEECH +2F95 >8C37 # KANGXI RADICAL VALLEY +2F96 >8C46 # KANGXI RADICAL BEAN +2F97 >8C55 # KANGXI RADICAL PIG +2F98 >8C78 # KANGXI RADICAL BADGER +2F99 >8C9D # KANGXI RADICAL SHELL +2F9A >8D64 # KANGXI RADICAL RED +2F9B >8D70 # KANGXI RADICAL RUN +2F9C >8DB3 # KANGXI RADICAL FOOT +2F9D >8EAB # KANGXI RADICAL BODY +2F9E >8ECA # KANGXI RADICAL CART +2F9F >8F9B # KANGXI RADICAL BITTER +2FA0 >8FB0 # KANGXI RADICAL MORNING +2FA1 >8FB5 # KANGXI RADICAL WALK +2FA2 >9091 # KANGXI RADICAL CITY +2FA3 >9149 # KANGXI RADICAL WINE +2FA4 >91C6 # KANGXI RADICAL DISTINGUISH +2FA5 >91CC # KANGXI RADICAL VILLAGE +2FA6 >91D1 # KANGXI RADICAL GOLD +2FA7 >9577 # KANGXI RADICAL LONG +2FA8 >9580 # KANGXI RADICAL GATE +2FA9 >961C # KANGXI RADICAL MOUND +2FAA >96B6 # KANGXI RADICAL SLAVE +2FAB >96B9 # KANGXI RADICAL SHORT TAILED BIRD +2FAC >96E8 # KANGXI RADICAL RAIN +2FAD >9751 # KANGXI RADICAL BLUE +2FAE >975E # KANGXI RADICAL WRONG +2FAF >9762 # KANGXI RADICAL FACE +2FB0 >9769 # KANGXI RADICAL LEATHER +2FB1 >97CB # KANGXI RADICAL TANNED LEATHER +2FB2 >97ED # KANGXI RADICAL LEEK +2FB3 >97F3 # KANGXI RADICAL SOUND +2FB4 >9801 # KANGXI RADICAL LEAF +2FB5 >98A8 # KANGXI RADICAL WIND +2FB6 >98DB # KANGXI RADICAL FLY +2FB7 >98DF # KANGXI RADICAL EAT +2FB8 >9996 # KANGXI RADICAL HEAD +2FB9 >9999 # KANGXI RADICAL FRAGRANT +2FBA >99AC # KANGXI RADICAL HORSE +2FBB >9AA8 # KANGXI RADICAL BONE +2FBC >9AD8 # KANGXI RADICAL TALL +2FBD >9ADF # KANGXI RADICAL HAIR +2FBE >9B25 # KANGXI RADICAL FIGHT +2FBF >9B2F # KANGXI RADICAL SACRIFICIAL WINE +2FC0 >9B32 # KANGXI RADICAL CAULDRON +2FC1 >9B3C # KANGXI RADICAL GHOST +2FC2 >9B5A # KANGXI RADICAL FISH +2FC3 >9CE5 # KANGXI RADICAL BIRD +2FC4 >9E75 # KANGXI RADICAL SALT +2FC5 >9E7F # KANGXI RADICAL DEER +2FC6 >9EA5 # KANGXI RADICAL WHEAT +2FC7 >9EBB # KANGXI RADICAL HEMP +2FC8 >9EC3 # KANGXI RADICAL YELLOW +2FC9 >9ECD # KANGXI RADICAL MILLET +2FCA >9ED1 # KANGXI RADICAL BLACK +2FCB >9EF9 # KANGXI RADICAL EMBROIDERY +2FCC >9EFD # KANGXI RADICAL FROG +2FCD >9F0E # KANGXI RADICAL TRIPOD +2FCE >9F13 # KANGXI RADICAL DRUM +2FCF >9F20 # KANGXI RADICAL RAT +2FD0 >9F3B # KANGXI RADICAL NOSE +2FD1 >9F4A # KANGXI RADICAL EVEN +2FD2 >9F52 # KANGXI RADICAL TOOTH +2FD3 >9F8D # KANGXI RADICAL DRAGON +2FD4 >9F9C # KANGXI RADICAL TURTLE +2FD5 >9FA0 # KANGXI RADICAL FLUTE +2FD6..2FEF >FFFD # .. +2FF0..2FFB >FFFD # IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT..IDEOGRAPHIC DESCRIPTION CHARACTER OVERLAID +2FFC..2FFF >FFFD # .. +3000 >FFFD # IDEOGRAPHIC SPACE +# 3001 valid # IDEOGRAPHIC COMMA +3002 >002E # IDEOGRAPHIC FULL STOP +# 3003..3035 valid # DITTO MARK..VERTICAL KANA REPEAT MARK LOWER HALF +3036 >3012 # CIRCLED POSTAL MARK +# 3037 valid # IDEOGRAPHIC TELEGRAPH LINE FEED SEPARATOR SYMBOL +3038 >5341 # HANGZHOU NUMERAL TEN +3039 >5344 # HANGZHOU NUMERAL TWENTY +303A >5345 # HANGZHOU NUMERAL THIRTY +# 303B..303F valid # VERTICAL IDEOGRAPHIC ITERATION MARK..IDEOGRAPHIC HALF FILL SPACE +3040 >FFFD # +# 3041..3096 valid # HIRAGANA LETTER SMALL A..HIRAGANA LETTER SMALL KE +3097..3098 >FFFD # .. +# 3099..309A valid # COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK..COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK +309B..309C >FFFD # KATAKANA-HIRAGANA VOICED SOUND MARK..KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK +# 309D..309E valid # HIRAGANA ITERATION MARK..HIRAGANA VOICED ITERATION MARK +309F >3088 308A # HIRAGANA DIGRAPH YORI +# 30A0..30FE valid # KATAKANA-HIRAGANA DOUBLE HYPHEN..KATAKANA VOICED ITERATION MARK +30FF >30B3 30C8 # KATAKANA DIGRAPH KOTO +3100..3104 >FFFD # .. +# 3105..312D valid # BOPOMOFO LETTER B..BOPOMOFO LETTER IH +312E..3130 >FFFD # .. +3131 >1100 # HANGUL LETTER KIYEOK +3132 >1101 # HANGUL LETTER SSANGKIYEOK +3133 >11AA # HANGUL LETTER KIYEOK-SIOS +3134 >1102 # HANGUL LETTER NIEUN +3135 >11AC # HANGUL LETTER NIEUN-CIEUC +3136 >11AD # HANGUL LETTER NIEUN-HIEUH +3137 >1103 # HANGUL LETTER TIKEUT +3138 >1104 # HANGUL LETTER SSANGTIKEUT +3139 >1105 # HANGUL LETTER RIEUL +313A >11B0 # HANGUL LETTER RIEUL-KIYEOK +313B >11B1 # HANGUL LETTER RIEUL-MIEUM +313C >11B2 # HANGUL LETTER RIEUL-PIEUP +313D >11B3 # HANGUL LETTER RIEUL-SIOS +313E >11B4 # HANGUL LETTER RIEUL-THIEUTH +313F >11B5 # HANGUL LETTER RIEUL-PHIEUPH +3140 >111A # HANGUL LETTER RIEUL-HIEUH +3141 >1106 # HANGUL LETTER MIEUM +3142 >1107 # HANGUL LETTER PIEUP +3143 >1108 # HANGUL LETTER SSANGPIEUP +3144 >1121 # HANGUL LETTER PIEUP-SIOS +3145 >1109 # HANGUL LETTER SIOS +3146 >110A # HANGUL LETTER SSANGSIOS +3147 >110B # HANGUL LETTER IEUNG +3148 >110C # HANGUL LETTER CIEUC +3149 >110D # HANGUL LETTER SSANGCIEUC +314A >110E # HANGUL LETTER CHIEUCH +314B >110F # HANGUL LETTER KHIEUKH +314C >1110 # HANGUL LETTER THIEUTH +314D >1111 # HANGUL LETTER PHIEUPH +314E >1112 # HANGUL LETTER HIEUH +314F >1161 # HANGUL LETTER A +3150 >1162 # HANGUL LETTER AE +3151 >1163 # HANGUL LETTER YA +3152 >1164 # HANGUL LETTER YAE +3153 >1165 # HANGUL LETTER EO +3154 >1166 # HANGUL LETTER E +3155 >1167 # HANGUL LETTER YEO +3156 >1168 # HANGUL LETTER YE +3157 >1169 # HANGUL LETTER O +3158 >116A # HANGUL LETTER WA +3159 >116B # HANGUL LETTER WAE +315A >116C # HANGUL LETTER OE +315B >116D # HANGUL LETTER YO +315C >116E # HANGUL LETTER U +315D >116F # HANGUL LETTER WEO +315E >1170 # HANGUL LETTER WE +315F >1171 # HANGUL LETTER WI +3160 >1172 # HANGUL LETTER YU +3161 >1173 # HANGUL LETTER EU +3162 >1174 # HANGUL LETTER YI +3163 >1175 # HANGUL LETTER I +3164 >FFFD # HANGUL FILLER +3165 >1114 # HANGUL LETTER SSANGNIEUN +3166 >1115 # HANGUL LETTER NIEUN-TIKEUT +3167 >11C7 # HANGUL LETTER NIEUN-SIOS +3168 >11C8 # HANGUL LETTER NIEUN-PANSIOS +3169 >11CC # HANGUL LETTER RIEUL-KIYEOK-SIOS +316A >11CE # HANGUL LETTER RIEUL-TIKEUT +316B >11D3 # HANGUL LETTER RIEUL-PIEUP-SIOS +316C >11D7 # HANGUL LETTER RIEUL-PANSIOS +316D >11D9 # HANGUL LETTER RIEUL-YEORINHIEUH +316E >111C # HANGUL LETTER MIEUM-PIEUP +316F >11DD # HANGUL LETTER MIEUM-SIOS +3170 >11DF # HANGUL LETTER MIEUM-PANSIOS +3171 >111D # HANGUL LETTER KAPYEOUNMIEUM +3172 >111E # HANGUL LETTER PIEUP-KIYEOK +3173 >1120 # HANGUL LETTER PIEUP-TIKEUT +3174 >1122 # HANGUL LETTER PIEUP-SIOS-KIYEOK +3175 >1123 # HANGUL LETTER PIEUP-SIOS-TIKEUT +3176 >1127 # HANGUL LETTER PIEUP-CIEUC +3177 >1129 # HANGUL LETTER PIEUP-THIEUTH +3178 >112B # HANGUL LETTER KAPYEOUNPIEUP +3179 >112C # HANGUL LETTER KAPYEOUNSSANGPIEUP +317A >112D # HANGUL LETTER SIOS-KIYEOK +317B >112E # HANGUL LETTER SIOS-NIEUN +317C >112F # HANGUL LETTER SIOS-TIKEUT +317D >1132 # HANGUL LETTER SIOS-PIEUP +317E >1136 # HANGUL LETTER SIOS-CIEUC +317F >1140 # HANGUL LETTER PANSIOS +3180 >1147 # HANGUL LETTER SSANGIEUNG +3181 >114C # HANGUL LETTER YESIEUNG +3182 >11F1 # HANGUL LETTER YESIEUNG-SIOS +3183 >11F2 # HANGUL LETTER YESIEUNG-PANSIOS +3184 >1157 # HANGUL LETTER KAPYEOUNPHIEUPH +3185 >1158 # HANGUL LETTER SSANGHIEUH +3186 >1159 # HANGUL LETTER YEORINHIEUH +3187 >1184 # HANGUL LETTER YO-YA +3188 >1185 # HANGUL LETTER YO-YAE +3189 >1188 # HANGUL LETTER YO-I +318A >1191 # HANGUL LETTER YU-YEO +318B >1192 # HANGUL LETTER YU-YE +318C >1194 # HANGUL LETTER YU-I +318D >119E # HANGUL LETTER ARAEA +318E >11A1 # HANGUL LETTER ARAEAE +318F >FFFD # +# 3190..3191 valid # IDEOGRAPHIC ANNOTATION LINKING MARK..IDEOGRAPHIC ANNOTATION REVERSE MARK +3192 >4E00 # IDEOGRAPHIC ANNOTATION ONE MARK +3193 >4E8C # IDEOGRAPHIC ANNOTATION TWO MARK +3194 >4E09 # IDEOGRAPHIC ANNOTATION THREE MARK +3195 >56DB # IDEOGRAPHIC ANNOTATION FOUR MARK +3196 >4E0A # IDEOGRAPHIC ANNOTATION TOP MARK +3197 >4E2D # IDEOGRAPHIC ANNOTATION MIDDLE MARK +3198 >4E0B # IDEOGRAPHIC ANNOTATION BOTTOM MARK +3199 >7532 # IDEOGRAPHIC ANNOTATION FIRST MARK +319A >4E59 # IDEOGRAPHIC ANNOTATION SECOND MARK +319B >4E19 # IDEOGRAPHIC ANNOTATION THIRD MARK +319C >4E01 # IDEOGRAPHIC ANNOTATION FOURTH MARK +319D >5929 # IDEOGRAPHIC ANNOTATION HEAVEN MARK +319E >5730 # IDEOGRAPHIC ANNOTATION EARTH MARK +319F >4EBA # IDEOGRAPHIC ANNOTATION MAN MARK +# 31A0..31B7 valid # BOPOMOFO LETTER BU..BOPOMOFO FINAL LETTER H +31B8..31BF >FFFD # .. +# 31C0..31E3 valid # CJK STROKE T..CJK STROKE Q +31E4..31EF >FFFD # .. +# 31F0..31FF valid # KATAKANA LETTER SMALL KU..KATAKANA LETTER SMALL RO +3200..321E >FFFD # PARENTHESIZED HANGUL KIYEOK..PARENTHESIZED KOREAN CHARACTER O HU +321F >FFFD # +3220..3243 >FFFD # PARENTHESIZED IDEOGRAPH ONE..PARENTHESIZED IDEOGRAPH REACH +3244 >554F # CIRCLED IDEOGRAPH QUESTION +3245 >5E7C # CIRCLED IDEOGRAPH KINDERGARTEN +3246 >6587 # CIRCLED IDEOGRAPH SCHOOL +3247 >7B8F # CIRCLED IDEOGRAPH KOTO +# 3248..324F valid # CIRCLED NUMBER TEN ON BLACK SQUARE..CIRCLED NUMBER EIGHTY ON BLACK SQUARE +3250 >0070 0074 0065 # PARTNERSHIP SIGN +3251 >0032 0031 # CIRCLED NUMBER TWENTY ONE +3252 >0032 0032 # CIRCLED NUMBER TWENTY TWO +3253 >0032 0033 # CIRCLED NUMBER TWENTY THREE +3254 >0032 0034 # CIRCLED NUMBER TWENTY FOUR +3255 >0032 0035 # CIRCLED NUMBER TWENTY FIVE +3256 >0032 0036 # CIRCLED NUMBER TWENTY SIX +3257 >0032 0037 # CIRCLED NUMBER TWENTY SEVEN +3258 >0032 0038 # CIRCLED NUMBER TWENTY EIGHT +3259 >0032 0039 # CIRCLED NUMBER TWENTY NINE +325A >0033 0030 # CIRCLED NUMBER THIRTY +325B >0033 0031 # CIRCLED NUMBER THIRTY ONE +325C >0033 0032 # CIRCLED NUMBER THIRTY TWO +325D >0033 0033 # CIRCLED NUMBER THIRTY THREE +325E >0033 0034 # CIRCLED NUMBER THIRTY FOUR +325F >0033 0035 # CIRCLED NUMBER THIRTY FIVE +3260 >1100 # CIRCLED HANGUL KIYEOK +3261 >1102 # CIRCLED HANGUL NIEUN +3262 >1103 # CIRCLED HANGUL TIKEUT +3263 >1105 # CIRCLED HANGUL RIEUL +3264 >1106 # CIRCLED HANGUL MIEUM +3265 >1107 # CIRCLED HANGUL PIEUP +3266 >1109 # CIRCLED HANGUL SIOS +3267 >110B # CIRCLED HANGUL IEUNG +3268 >110C # CIRCLED HANGUL CIEUC +3269 >110E # CIRCLED HANGUL CHIEUCH +326A >110F # CIRCLED HANGUL KHIEUKH +326B >1110 # CIRCLED HANGUL THIEUTH +326C >1111 # CIRCLED HANGUL PHIEUPH +326D >1112 # CIRCLED HANGUL HIEUH +326E >AC00 # CIRCLED HANGUL KIYEOK A +326F >B098 # CIRCLED HANGUL NIEUN A +3270 >B2E4 # CIRCLED HANGUL TIKEUT A +3271 >B77C # CIRCLED HANGUL RIEUL A +3272 >B9C8 # CIRCLED HANGUL MIEUM A +3273 >BC14 # CIRCLED HANGUL PIEUP A +3274 >C0AC # CIRCLED HANGUL SIOS A +3275 >C544 # CIRCLED HANGUL IEUNG A +3276 >C790 # CIRCLED HANGUL CIEUC A +3277 >CC28 # CIRCLED HANGUL CHIEUCH A +3278 >CE74 # CIRCLED HANGUL KHIEUKH A +3279 >D0C0 # CIRCLED HANGUL THIEUTH A +327A >D30C # CIRCLED HANGUL PHIEUPH A +327B >D558 # CIRCLED HANGUL HIEUH A +327C >CC38 ACE0 # CIRCLED KOREAN CHARACTER CHAMKO +327D >C8FC C758 # CIRCLED KOREAN CHARACTER JUEUI +327E >C6B0 # CIRCLED HANGUL IEUNG U +# 327F valid # KOREAN STANDARD SYMBOL +3280 >4E00 # CIRCLED IDEOGRAPH ONE +3281 >4E8C # CIRCLED IDEOGRAPH TWO +3282 >4E09 # CIRCLED IDEOGRAPH THREE +3283 >56DB # CIRCLED IDEOGRAPH FOUR +3284 >4E94 # CIRCLED IDEOGRAPH FIVE +3285 >516D # CIRCLED IDEOGRAPH SIX +3286 >4E03 # CIRCLED IDEOGRAPH SEVEN +3287 >516B # CIRCLED IDEOGRAPH EIGHT +3288 >4E5D # CIRCLED IDEOGRAPH NINE +3289 >5341 # CIRCLED IDEOGRAPH TEN +328A >6708 # CIRCLED IDEOGRAPH MOON +328B >706B # CIRCLED IDEOGRAPH FIRE +328C >6C34 # CIRCLED IDEOGRAPH WATER +328D >6728 # CIRCLED IDEOGRAPH WOOD +328E >91D1 # CIRCLED IDEOGRAPH METAL +328F >571F # CIRCLED IDEOGRAPH EARTH +3290 >65E5 # CIRCLED IDEOGRAPH SUN +3291 >682A # CIRCLED IDEOGRAPH STOCK +3292 >6709 # CIRCLED IDEOGRAPH HAVE +3293 >793E # CIRCLED IDEOGRAPH SOCIETY +3294 >540D # CIRCLED IDEOGRAPH NAME +3295 >7279 # CIRCLED IDEOGRAPH SPECIAL +3296 >8CA1 # CIRCLED IDEOGRAPH FINANCIAL +3297 >795D # CIRCLED IDEOGRAPH CONGRATULATION +3298 >52B4 # CIRCLED IDEOGRAPH LABOR +3299 >79D8 # CIRCLED IDEOGRAPH SECRET +329A >7537 # CIRCLED IDEOGRAPH MALE +329B >5973 # CIRCLED IDEOGRAPH FEMALE +329C >9069 # CIRCLED IDEOGRAPH SUITABLE +329D >512A # CIRCLED IDEOGRAPH EXCELLENT +329E >5370 # CIRCLED IDEOGRAPH PRINT +329F >6CE8 # CIRCLED IDEOGRAPH ATTENTION +32A0 >9805 # CIRCLED IDEOGRAPH ITEM +32A1 >4F11 # CIRCLED IDEOGRAPH REST +32A2 >5199 # CIRCLED IDEOGRAPH COPY +32A3 >6B63 # CIRCLED IDEOGRAPH CORRECT +32A4 >4E0A # CIRCLED IDEOGRAPH HIGH +32A5 >4E2D # CIRCLED IDEOGRAPH CENTRE +32A6 >4E0B # CIRCLED IDEOGRAPH LOW +32A7 >5DE6 # CIRCLED IDEOGRAPH LEFT +32A8 >53F3 # CIRCLED IDEOGRAPH RIGHT +32A9 >533B # CIRCLED IDEOGRAPH MEDICINE +32AA >5B97 # CIRCLED IDEOGRAPH RELIGION +32AB >5B66 # CIRCLED IDEOGRAPH STUDY +32AC >76E3 # CIRCLED IDEOGRAPH SUPERVISE +32AD >4F01 # CIRCLED IDEOGRAPH ENTERPRISE +32AE >8CC7 # CIRCLED IDEOGRAPH RESOURCE +32AF >5354 # CIRCLED IDEOGRAPH ALLIANCE +32B0 >591C # CIRCLED IDEOGRAPH NIGHT +32B1 >0033 0036 # CIRCLED NUMBER THIRTY SIX +32B2 >0033 0037 # CIRCLED NUMBER THIRTY SEVEN +32B3 >0033 0038 # CIRCLED NUMBER THIRTY EIGHT +32B4 >0033 0039 # CIRCLED NUMBER THIRTY NINE +32B5 >0034 0030 # CIRCLED NUMBER FORTY +32B6 >0034 0031 # CIRCLED NUMBER FORTY ONE +32B7 >0034 0032 # CIRCLED NUMBER FORTY TWO +32B8 >0034 0033 # CIRCLED NUMBER FORTY THREE +32B9 >0034 0034 # CIRCLED NUMBER FORTY FOUR +32BA >0034 0035 # CIRCLED NUMBER FORTY FIVE +32BB >0034 0036 # CIRCLED NUMBER FORTY SIX +32BC >0034 0037 # CIRCLED NUMBER FORTY SEVEN +32BD >0034 0038 # CIRCLED NUMBER FORTY EIGHT +32BE >0034 0039 # CIRCLED NUMBER FORTY NINE +32BF >0035 0030 # CIRCLED NUMBER FIFTY +32C0 >0031 6708 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY +32C1 >0032 6708 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR FEBRUARY +32C2 >0033 6708 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR MARCH +32C3 >0034 6708 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR APRIL +32C4 >0035 6708 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR MAY +32C5 >0036 6708 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR JUNE +32C6 >0037 6708 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR JULY +32C7 >0038 6708 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR AUGUST +32C8 >0039 6708 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR SEPTEMBER +32C9 >0031 0030 6708 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR OCTOBER +32CA >0031 0031 6708 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR NOVEMBER +32CB >0031 0032 6708 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DECEMBER +32CC >0068 0067 # SQUARE HG +32CD >0065 0072 0067 # SQUARE ERG +32CE >0065 0076 # SQUARE EV +32CF >006C 0074 0064 # LIMITED LIABILITY SIGN +32D0 >30A2 # CIRCLED KATAKANA A +32D1 >30A4 # CIRCLED KATAKANA I +32D2 >30A6 # CIRCLED KATAKANA U +32D3 >30A8 # CIRCLED KATAKANA E +32D4 >30AA # CIRCLED KATAKANA O +32D5 >30AB # CIRCLED KATAKANA KA +32D6 >30AD # CIRCLED KATAKANA KI +32D7 >30AF # CIRCLED KATAKANA KU +32D8 >30B1 # CIRCLED KATAKANA KE +32D9 >30B3 # CIRCLED KATAKANA KO +32DA >30B5 # CIRCLED KATAKANA SA +32DB >30B7 # CIRCLED KATAKANA SI +32DC >30B9 # CIRCLED KATAKANA SU +32DD >30BB # CIRCLED KATAKANA SE +32DE >30BD # CIRCLED KATAKANA SO +32DF >30BF # CIRCLED KATAKANA TA +32E0 >30C1 # CIRCLED KATAKANA TI +32E1 >30C4 # CIRCLED KATAKANA TU +32E2 >30C6 # CIRCLED KATAKANA TE +32E3 >30C8 # CIRCLED KATAKANA TO +32E4 >30CA # CIRCLED KATAKANA NA +32E5 >30CB # CIRCLED KATAKANA NI +32E6 >30CC # CIRCLED KATAKANA NU +32E7 >30CD # CIRCLED KATAKANA NE +32E8 >30CE # CIRCLED KATAKANA NO +32E9 >30CF # CIRCLED KATAKANA HA +32EA >30D2 # CIRCLED KATAKANA HI +32EB >30D5 # CIRCLED KATAKANA HU +32EC >30D8 # CIRCLED KATAKANA HE +32ED >30DB # CIRCLED KATAKANA HO +32EE >30DE # CIRCLED KATAKANA MA +32EF >30DF # CIRCLED KATAKANA MI +32F0 >30E0 # CIRCLED KATAKANA MU +32F1 >30E1 # CIRCLED KATAKANA ME +32F2 >30E2 # CIRCLED KATAKANA MO +32F3 >30E4 # CIRCLED KATAKANA YA +32F4 >30E6 # CIRCLED KATAKANA YU +32F5 >30E8 # CIRCLED KATAKANA YO +32F6 >30E9 # CIRCLED KATAKANA RA +32F7 >30EA # CIRCLED KATAKANA RI +32F8 >30EB # CIRCLED KATAKANA RU +32F9 >30EC # CIRCLED KATAKANA RE +32FA >30ED # CIRCLED KATAKANA RO +32FB >30EF # CIRCLED KATAKANA WA +32FC >30F0 # CIRCLED KATAKANA WI +32FD >30F1 # CIRCLED KATAKANA WE +32FE >30F2 # CIRCLED KATAKANA WO +32FF >FFFD # +3300 >30A2 30D1 30FC 30C8 # SQUARE APAATO +3301 >30A2 30EB 30D5 30A1 # SQUARE ARUHUA +3302 >30A2 30F3 30DA 30A2 # SQUARE ANPEA +3303 >30A2 30FC 30EB # SQUARE AARU +3304 >30A4 30CB 30F3 30B0 # SQUARE ININGU +3305 >30A4 30F3 30C1 # SQUARE INTI +3306 >30A6 30A9 30F3 # SQUARE UON +3307 >30A8 30B9 30AF 30FC 30C9 # SQUARE ESUKUUDO +3308 >30A8 30FC 30AB 30FC # SQUARE EEKAA +3309 >30AA 30F3 30B9 # SQUARE ONSU +330A >30AA 30FC 30E0 # SQUARE OOMU +330B >30AB 30A4 30EA # SQUARE KAIRI +330C >30AB 30E9 30C3 30C8 # SQUARE KARATTO +330D >30AB 30ED 30EA 30FC # SQUARE KARORII +330E >30AC 30ED 30F3 # SQUARE GARON +330F >30AC 30F3 30DE # SQUARE GANMA +3310 >30AE 30AC # SQUARE GIGA +3311 >30AE 30CB 30FC # SQUARE GINII +3312 >30AD 30E5 30EA 30FC # SQUARE KYURII +3313 >30AE 30EB 30C0 30FC # SQUARE GIRUDAA +3314 >30AD 30ED # SQUARE KIRO +3315 >30AD 30ED 30B0 30E9 30E0 # SQUARE KIROGURAMU +3316 >30AD 30ED 30E1 30FC 30C8 30EB # SQUARE KIROMEETORU +3317 >30AD 30ED 30EF 30C3 30C8 # SQUARE KIROWATTO +3318 >30B0 30E9 30E0 # SQUARE GURAMU +3319 >30B0 30E9 30E0 30C8 30F3 # SQUARE GURAMUTON +331A >30AF 30EB 30BC 30A4 30ED # SQUARE KURUZEIRO +331B >30AF 30ED 30FC 30CD # SQUARE KUROONE +331C >30B1 30FC 30B9 # SQUARE KEESU +331D >30B3 30EB 30CA # SQUARE KORUNA +331E >30B3 30FC 30DD # SQUARE KOOPO +331F >30B5 30A4 30AF 30EB # SQUARE SAIKURU +3320 >30B5 30F3 30C1 30FC 30E0 # SQUARE SANTIIMU +3321 >30B7 30EA 30F3 30B0 # SQUARE SIRINGU +3322 >30BB 30F3 30C1 # SQUARE SENTI +3323 >30BB 30F3 30C8 # SQUARE SENTO +3324 >30C0 30FC 30B9 # SQUARE DAASU +3325 >30C7 30B7 # SQUARE DESI +3326 >30C9 30EB # SQUARE DORU +3327 >30C8 30F3 # SQUARE TON +3328 >30CA 30CE # SQUARE NANO +3329 >30CE 30C3 30C8 # SQUARE NOTTO +332A >30CF 30A4 30C4 # SQUARE HAITU +332B >30D1 30FC 30BB 30F3 30C8 # SQUARE PAASENTO +332C >30D1 30FC 30C4 # SQUARE PAATU +332D >30D0 30FC 30EC 30EB # SQUARE BAARERU +332E >30D4 30A2 30B9 30C8 30EB # SQUARE PIASUTORU +332F >30D4 30AF 30EB # SQUARE PIKURU +3330 >30D4 30B3 # SQUARE PIKO +3331 >30D3 30EB # SQUARE BIRU +3332 >30D5 30A1 30E9 30C3 30C9 # SQUARE HUARADDO +3333 >30D5 30A3 30FC 30C8 # SQUARE HUIITO +3334 >30D6 30C3 30B7 30A7 30EB # SQUARE BUSSYERU +3335 >30D5 30E9 30F3 # SQUARE HURAN +3336 >30D8 30AF 30BF 30FC 30EB # SQUARE HEKUTAARU +3337 >30DA 30BD # SQUARE PESO +3338 >30DA 30CB 30D2 # SQUARE PENIHI +3339 >30D8 30EB 30C4 # SQUARE HERUTU +333A >30DA 30F3 30B9 # SQUARE PENSU +333B >30DA 30FC 30B8 # SQUARE PEEZI +333C >30D9 30FC 30BF # SQUARE BEETA +333D >30DD 30A4 30F3 30C8 # SQUARE POINTO +333E >30DC 30EB 30C8 # SQUARE BORUTO +333F >30DB 30F3 # SQUARE HON +3340 >30DD 30F3 30C9 # SQUARE PONDO +3341 >30DB 30FC 30EB # SQUARE HOORU +3342 >30DB 30FC 30F3 # SQUARE HOON +3343 >30DE 30A4 30AF 30ED # SQUARE MAIKURO +3344 >30DE 30A4 30EB # SQUARE MAIRU +3345 >30DE 30C3 30CF # SQUARE MAHHA +3346 >30DE 30EB 30AF # SQUARE MARUKU +3347 >30DE 30F3 30B7 30E7 30F3 # SQUARE MANSYON +3348 >30DF 30AF 30ED 30F3 # SQUARE MIKURON +3349 >30DF 30EA # SQUARE MIRI +334A >30DF 30EA 30D0 30FC 30EB # SQUARE MIRIBAARU +334B >30E1 30AC # SQUARE MEGA +334C >30E1 30AC 30C8 30F3 # SQUARE MEGATON +334D >30E1 30FC 30C8 30EB # SQUARE MEETORU +334E >30E4 30FC 30C9 # SQUARE YAADO +334F >30E4 30FC 30EB # SQUARE YAARU +3350 >30E6 30A2 30F3 # SQUARE YUAN +3351 >30EA 30C3 30C8 30EB # SQUARE RITTORU +3352 >30EA 30E9 # SQUARE RIRA +3353 >30EB 30D4 30FC # SQUARE RUPII +3354 >30EB 30FC 30D6 30EB # SQUARE RUUBURU +3355 >30EC 30E0 # SQUARE REMU +3356 >30EC 30F3 30C8 30B2 30F3 # SQUARE RENTOGEN +3357 >30EF 30C3 30C8 # SQUARE WATTO +3358 >0030 70B9 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ZERO +3359 >0031 70B9 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ONE +335A >0032 70B9 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWO +335B >0033 70B9 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THREE +335C >0034 70B9 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOUR +335D >0035 70B9 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIVE +335E >0036 70B9 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIX +335F >0037 70B9 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVEN +3360 >0038 70B9 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHT +3361 >0039 70B9 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINE +3362 >0031 0030 70B9 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TEN +3363 >0031 0031 70B9 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ELEVEN +3364 >0031 0032 70B9 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWELVE +3365 >0031 0033 70B9 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THIRTEEN +3366 >0031 0034 70B9 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOURTEEN +3367 >0031 0035 70B9 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIFTEEN +3368 >0031 0036 70B9 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIXTEEN +3369 >0031 0037 70B9 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVENTEEN +336A >0031 0038 70B9 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHTEEN +336B >0031 0039 70B9 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINETEEN +336C >0032 0030 70B9 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY +336D >0032 0031 70B9 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-ONE +336E >0032 0032 70B9 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-TWO +336F >0032 0033 70B9 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-THREE +3370 >0032 0034 70B9 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-FOUR +3371 >0068 0070 0061 # SQUARE HPA +3372 >0064 0061 # SQUARE DA +3373 >0061 0075 # SQUARE AU +3374 >0062 0061 0072 # SQUARE BAR +3375 >006F 0076 # SQUARE OV +3376 >0070 0063 # SQUARE PC +3377 >0064 006D # SQUARE DM +3378 >0064 006D 0032 # SQUARE DM SQUARED +3379 >0064 006D 0033 # SQUARE DM CUBED +337A >0069 0075 # SQUARE IU +337B >5E73 6210 # SQUARE ERA NAME HEISEI +337C >662D 548C # SQUARE ERA NAME SYOUWA +337D >5927 6B63 # SQUARE ERA NAME TAISYOU +337E >660E 6CBB # SQUARE ERA NAME MEIZI +337F >682A 5F0F 4F1A 793E # SQUARE CORPORATION +3380 >0070 0061 # SQUARE PA AMPS +3381 >006E 0061 # SQUARE NA +3382 >03BC 0061 # SQUARE MU A +3383 >006D 0061 # SQUARE MA +3384 >006B 0061 # SQUARE KA +3385 >006B 0062 # SQUARE KB +3386 >006D 0062 # SQUARE MB +3387 >0067 0062 # SQUARE GB +3388 >0063 0061 006C # SQUARE CAL +3389 >006B 0063 0061 006C # SQUARE KCAL +338A >0070 0066 # SQUARE PF +338B >006E 0066 # SQUARE NF +338C >03BC 0066 # SQUARE MU F +338D >03BC 0067 # SQUARE MU G +338E >006D 0067 # SQUARE MG +338F >006B 0067 # SQUARE KG +3390 >0068 007A # SQUARE HZ +3391 >006B 0068 007A # SQUARE KHZ +3392 >006D 0068 007A # SQUARE MHZ +3393 >0067 0068 007A # SQUARE GHZ +3394 >0074 0068 007A # SQUARE THZ +3395 >03BC 006C # SQUARE MU L +3396 >006D 006C # SQUARE ML +3397 >0064 006C # SQUARE DL +3398 >006B 006C # SQUARE KL +3399 >0066 006D # SQUARE FM +339A >006E 006D # SQUARE NM +339B >03BC 006D # SQUARE MU M +339C >006D 006D # SQUARE MM +339D >0063 006D # SQUARE CM +339E >006B 006D # SQUARE KM +339F >006D 006D 0032 # SQUARE MM SQUARED +33A0 >0063 006D 0032 # SQUARE CM SQUARED +33A1 >006D 0032 # SQUARE M SQUARED +33A2 >006B 006D 0032 # SQUARE KM SQUARED +33A3 >006D 006D 0033 # SQUARE MM CUBED +33A4 >0063 006D 0033 # SQUARE CM CUBED +33A5 >006D 0033 # SQUARE M CUBED +33A6 >006B 006D 0033 # SQUARE KM CUBED +33A7 >006D 2215 0073 # SQUARE M OVER S +33A8 >006D 2215 0073 0032 # SQUARE M OVER S SQUARED +33A9 >0070 0061 # SQUARE PA +33AA >006B 0070 0061 # SQUARE KPA +33AB >006D 0070 0061 # SQUARE MPA +33AC >0067 0070 0061 # SQUARE GPA +33AD >0072 0061 0064 # SQUARE RAD +33AE >0072 0061 0064 2215 0073 # SQUARE RAD OVER S +33AF >0072 0061 0064 2215 0073 0032 # SQUARE RAD OVER S SQUARED +33B0 >0070 0073 # SQUARE PS +33B1 >006E 0073 # SQUARE NS +33B2 >03BC 0073 # SQUARE MU S +33B3 >006D 0073 # SQUARE MS +33B4 >0070 0076 # SQUARE PV +33B5 >006E 0076 # SQUARE NV +33B6 >03BC 0076 # SQUARE MU V +33B7 >006D 0076 # SQUARE MV +33B8 >006B 0076 # SQUARE KV +33B9 >006D 0076 # SQUARE MV MEGA +33BA >0070 0077 # SQUARE PW +33BB >006E 0077 # SQUARE NW +33BC >03BC 0077 # SQUARE MU W +33BD >006D 0077 # SQUARE MW +33BE >006B 0077 # SQUARE KW +33BF >006D 0077 # SQUARE MW MEGA +33C0 >006B 03C9 # SQUARE K OHM +33C1 >006D 03C9 # SQUARE M OHM +33C2 >FFFD # SQUARE AM +33C3 >0062 0071 # SQUARE BQ +33C4 >0063 0063 # SQUARE CC +33C5 >0063 0064 # SQUARE CD +33C6 >0063 2215 006B 0067 # SQUARE C OVER KG +33C7 >FFFD # SQUARE CO +33C8 >0064 0062 # SQUARE DB +33C9 >0067 0079 # SQUARE GY +33CA >0068 0061 # SQUARE HA +33CB >0068 0070 # SQUARE HP +33CC >0069 006E # SQUARE IN +33CD >006B 006B # SQUARE KK +33CE >006B 006D # SQUARE KM CAPITAL +33CF >006B 0074 # SQUARE KT +33D0 >006C 006D # SQUARE LM +33D1 >006C 006E # SQUARE LN +33D2 >006C 006F 0067 # SQUARE LOG +33D3 >006C 0078 # SQUARE LX +33D4 >006D 0062 # SQUARE MB SMALL +33D5 >006D 0069 006C # SQUARE MIL +33D6 >006D 006F 006C # SQUARE MOL +33D7 >0070 0068 # SQUARE PH +33D8 >FFFD # SQUARE PM +33D9 >0070 0070 006D # SQUARE PPM +33DA >0070 0072 # SQUARE PR +33DB >0073 0072 # SQUARE SR +33DC >0073 0076 # SQUARE SV +33DD >0077 0062 # SQUARE WB +33DE >0076 2215 006D # SQUARE V OVER M +33DF >0061 2215 006D # SQUARE A OVER M +33E0 >0031 65E5 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ONE +33E1 >0032 65E5 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWO +33E2 >0033 65E5 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THREE +33E3 >0034 65E5 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOUR +33E4 >0035 65E5 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIVE +33E5 >0036 65E5 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIX +33E6 >0037 65E5 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVEN +33E7 >0038 65E5 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHT +33E8 >0039 65E5 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINE +33E9 >0031 0030 65E5 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TEN +33EA >0031 0031 65E5 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ELEVEN +33EB >0031 0032 65E5 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWELVE +33EC >0031 0033 65E5 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTEEN +33ED >0031 0034 65E5 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOURTEEN +33EE >0031 0035 65E5 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIFTEEN +33EF >0031 0036 65E5 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIXTEEN +33F0 >0031 0037 65E5 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVENTEEN +33F1 >0031 0038 65E5 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHTEEN +33F2 >0031 0039 65E5 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINETEEN +33F3 >0032 0030 65E5 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY +33F4 >0032 0031 65E5 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-ONE +33F5 >0032 0032 65E5 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-TWO +33F6 >0032 0033 65E5 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-THREE +33F7 >0032 0034 65E5 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FOUR +33F8 >0032 0035 65E5 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FIVE +33F9 >0032 0036 65E5 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SIX +33FA >0032 0037 65E5 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SEVEN +33FB >0032 0038 65E5 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-EIGHT +33FC >0032 0039 65E5 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-NINE +33FD >0033 0030 65E5 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY +33FE >0033 0031 65E5 # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY-ONE +33FF >0067 0061 006C # SQUARE GAL +# 3400..4DB5 valid # CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DB5 +4DB6..4DBF >FFFD # .. +# 4DC0..9FCB valid # HEXAGRAM FOR THE CREATIVE HEAVEN..CJK UNIFIED IDEOGRAPH-9FCB +9FCC..9FFF >FFFD # .. +# A000..A48C valid # YI SYLLABLE IT..YI SYLLABLE YYR +A48D..A48F >FFFD # .. +# A490..A4C6 valid # YI RADICAL QOT..YI RADICAL KE +A4C7..A4CF >FFFD # .. +# A4D0..A62B valid # LISU LETTER BA..VAI SYLLABLE NDOLE DO +A62C..A63F >FFFD # .. +A640 >A641 # CYRILLIC CAPITAL LETTER ZEMLYA +# A641 valid # CYRILLIC SMALL LETTER ZEMLYA +A642 >A643 # CYRILLIC CAPITAL LETTER DZELO +# A643 valid # CYRILLIC SMALL LETTER DZELO +A644 >A645 # CYRILLIC CAPITAL LETTER REVERSED DZE +# A645 valid # CYRILLIC SMALL LETTER REVERSED DZE +A646 >A647 # CYRILLIC CAPITAL LETTER IOTA +# A647 valid # CYRILLIC SMALL LETTER IOTA +A648 >A649 # CYRILLIC CAPITAL LETTER DJERV +# A649 valid # CYRILLIC SMALL LETTER DJERV +A64A >A64B # CYRILLIC CAPITAL LETTER MONOGRAPH UK +# A64B valid # CYRILLIC SMALL LETTER MONOGRAPH UK +A64C >A64D # CYRILLIC CAPITAL LETTER BROAD OMEGA +# A64D valid # CYRILLIC SMALL LETTER BROAD OMEGA +A64E >A64F # CYRILLIC CAPITAL LETTER NEUTRAL YER +# A64F valid # CYRILLIC SMALL LETTER NEUTRAL YER +A650 >A651 # CYRILLIC CAPITAL LETTER YERU WITH BACK YER +# A651 valid # CYRILLIC SMALL LETTER YERU WITH BACK YER +A652 >A653 # CYRILLIC CAPITAL LETTER IOTIFIED YAT +# A653 valid # CYRILLIC SMALL LETTER IOTIFIED YAT +A654 >A655 # CYRILLIC CAPITAL LETTER REVERSED YU +# A655 valid # CYRILLIC SMALL LETTER REVERSED YU +A656 >A657 # CYRILLIC CAPITAL LETTER IOTIFIED A +# A657 valid # CYRILLIC SMALL LETTER IOTIFIED A +A658 >A659 # CYRILLIC CAPITAL LETTER CLOSED LITTLE YUS +# A659 valid # CYRILLIC SMALL LETTER CLOSED LITTLE YUS +A65A >A65B # CYRILLIC CAPITAL LETTER BLENDED YUS +# A65B valid # CYRILLIC SMALL LETTER BLENDED YUS +A65C >A65D # CYRILLIC CAPITAL LETTER IOTIFIED CLOSED LITTLE YUS +# A65D valid # CYRILLIC SMALL LETTER IOTIFIED CLOSED LITTLE YUS +A65E >A65F # CYRILLIC CAPITAL LETTER YN +# A65F valid # CYRILLIC SMALL LETTER YN +A660..A661 >FFFD # .. +A662 >A663 # CYRILLIC CAPITAL LETTER SOFT DE +# A663 valid # CYRILLIC SMALL LETTER SOFT DE +A664 >A665 # CYRILLIC CAPITAL LETTER SOFT EL +# A665 valid # CYRILLIC SMALL LETTER SOFT EL +A666 >A667 # CYRILLIC CAPITAL LETTER SOFT EM +# A667 valid # CYRILLIC SMALL LETTER SOFT EM +A668 >A669 # CYRILLIC CAPITAL LETTER MONOCULAR O +# A669 valid # CYRILLIC SMALL LETTER MONOCULAR O +A66A >A66B # CYRILLIC CAPITAL LETTER BINOCULAR O +# A66B valid # CYRILLIC SMALL LETTER BINOCULAR O +A66C >A66D # CYRILLIC CAPITAL LETTER DOUBLE MONOCULAR O +# A66D..A673 valid # CYRILLIC SMALL LETTER DOUBLE MONOCULAR O..SLAVONIC ASTERISK +A674..A67B >FFFD # .. +# A67C..A67F valid # COMBINING CYRILLIC KAVYKA..CYRILLIC PAYEROK +A680 >A681 # CYRILLIC CAPITAL LETTER DWE +# A681 valid # CYRILLIC SMALL LETTER DWE +A682 >A683 # CYRILLIC CAPITAL LETTER DZWE +# A683 valid # CYRILLIC SMALL LETTER DZWE +A684 >A685 # CYRILLIC CAPITAL LETTER ZHWE +# A685 valid # CYRILLIC SMALL LETTER ZHWE +A686 >A687 # CYRILLIC CAPITAL LETTER CCHE +# A687 valid # CYRILLIC SMALL LETTER CCHE +A688 >A689 # CYRILLIC CAPITAL LETTER DZZE +# A689 valid # CYRILLIC SMALL LETTER DZZE +A68A >A68B # CYRILLIC CAPITAL LETTER TE WITH MIDDLE HOOK +# A68B valid # CYRILLIC SMALL LETTER TE WITH MIDDLE HOOK +A68C >A68D # CYRILLIC CAPITAL LETTER TWE +# A68D valid # CYRILLIC SMALL LETTER TWE +A68E >A68F # CYRILLIC CAPITAL LETTER TSWE +# A68F valid # CYRILLIC SMALL LETTER TSWE +A690 >A691 # CYRILLIC CAPITAL LETTER TSSE +# A691 valid # CYRILLIC SMALL LETTER TSSE +A692 >A693 # CYRILLIC CAPITAL LETTER TCHE +# A693 valid # CYRILLIC SMALL LETTER TCHE +A694 >A695 # CYRILLIC CAPITAL LETTER HWE +# A695 valid # CYRILLIC SMALL LETTER HWE +A696 >A697 # CYRILLIC CAPITAL LETTER SHWE +# A697 valid # CYRILLIC SMALL LETTER SHWE +A698..A69F >FFFD # .. +# A6A0..A6F7 valid # BAMUM LETTER A..BAMUM QUESTION MARK +A6F8..A6FF >FFFD # .. +# A700..A721 valid # MODIFIER LETTER CHINESE TONE YIN PING..MODIFIER LETTER STRESS AND LOW TONE +A722 >A723 # LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF +# A723 valid # LATIN SMALL LETTER EGYPTOLOGICAL ALEF +A724 >A725 # LATIN CAPITAL LETTER EGYPTOLOGICAL AIN +# A725 valid # LATIN SMALL LETTER EGYPTOLOGICAL AIN +A726 >A727 # LATIN CAPITAL LETTER HENG +# A727 valid # LATIN SMALL LETTER HENG +A728 >A729 # LATIN CAPITAL LETTER TZ +# A729 valid # LATIN SMALL LETTER TZ +A72A >A72B # LATIN CAPITAL LETTER TRESILLO +# A72B valid # LATIN SMALL LETTER TRESILLO +A72C >A72D # LATIN CAPITAL LETTER CUATRILLO +# A72D valid # LATIN SMALL LETTER CUATRILLO +A72E >A72F # LATIN CAPITAL LETTER CUATRILLO WITH COMMA +# A72F..A731 valid # LATIN SMALL LETTER CUATRILLO WITH COMMA..LATIN LETTER SMALL CAPITAL S +A732 >A733 # LATIN CAPITAL LETTER AA +# A733 valid # LATIN SMALL LETTER AA +A734 >A735 # LATIN CAPITAL LETTER AO +# A735 valid # LATIN SMALL LETTER AO +A736 >A737 # LATIN CAPITAL LETTER AU +# A737 valid # LATIN SMALL LETTER AU +A738 >A739 # LATIN CAPITAL LETTER AV +# A739 valid # LATIN SMALL LETTER AV +A73A >A73B # LATIN CAPITAL LETTER AV WITH HORIZONTAL BAR +# A73B valid # LATIN SMALL LETTER AV WITH HORIZONTAL BAR +A73C >A73D # LATIN CAPITAL LETTER AY +# A73D valid # LATIN SMALL LETTER AY +A73E >A73F # LATIN CAPITAL LETTER REVERSED C WITH DOT +# A73F valid # LATIN SMALL LETTER REVERSED C WITH DOT +A740 >A741 # LATIN CAPITAL LETTER K WITH STROKE +# A741 valid # LATIN SMALL LETTER K WITH STROKE +A742 >A743 # LATIN CAPITAL LETTER K WITH DIAGONAL STROKE +# A743 valid # LATIN SMALL LETTER K WITH DIAGONAL STROKE +A744 >A745 # LATIN CAPITAL LETTER K WITH STROKE AND DIAGONAL STROKE +# A745 valid # LATIN SMALL LETTER K WITH STROKE AND DIAGONAL STROKE +A746 >A747 # LATIN CAPITAL LETTER BROKEN L +# A747 valid # LATIN SMALL LETTER BROKEN L +A748 >A749 # LATIN CAPITAL LETTER L WITH HIGH STROKE +# A749 valid # LATIN SMALL LETTER L WITH HIGH STROKE +A74A >A74B # LATIN CAPITAL LETTER O WITH LONG STROKE OVERLAY +# A74B valid # LATIN SMALL LETTER O WITH LONG STROKE OVERLAY +A74C >A74D # LATIN CAPITAL LETTER O WITH LOOP +# A74D valid # LATIN SMALL LETTER O WITH LOOP +A74E >A74F # LATIN CAPITAL LETTER OO +# A74F valid # LATIN SMALL LETTER OO +A750 >A751 # LATIN CAPITAL LETTER P WITH STROKE THROUGH DESCENDER +# A751 valid # LATIN SMALL LETTER P WITH STROKE THROUGH DESCENDER +A752 >A753 # LATIN CAPITAL LETTER P WITH FLOURISH +# A753 valid # LATIN SMALL LETTER P WITH FLOURISH +A754 >A755 # LATIN CAPITAL LETTER P WITH SQUIRREL TAIL +# A755 valid # LATIN SMALL LETTER P WITH SQUIRREL TAIL +A756 >A757 # LATIN CAPITAL LETTER Q WITH STROKE THROUGH DESCENDER +# A757 valid # LATIN SMALL LETTER Q WITH STROKE THROUGH DESCENDER +A758 >A759 # LATIN CAPITAL LETTER Q WITH DIAGONAL STROKE +# A759 valid # LATIN SMALL LETTER Q WITH DIAGONAL STROKE +A75A >A75B # LATIN CAPITAL LETTER R ROTUNDA +# A75B valid # LATIN SMALL LETTER R ROTUNDA +A75C >A75D # LATIN CAPITAL LETTER RUM ROTUNDA +# A75D valid # LATIN SMALL LETTER RUM ROTUNDA +A75E >A75F # LATIN CAPITAL LETTER V WITH DIAGONAL STROKE +# A75F valid # LATIN SMALL LETTER V WITH DIAGONAL STROKE +A760 >A761 # LATIN CAPITAL LETTER VY +# A761 valid # LATIN SMALL LETTER VY +A762 >A763 # LATIN CAPITAL LETTER VISIGOTHIC Z +# A763 valid # LATIN SMALL LETTER VISIGOTHIC Z +A764 >A765 # LATIN CAPITAL LETTER THORN WITH STROKE +# A765 valid # LATIN SMALL LETTER THORN WITH STROKE +A766 >A767 # LATIN CAPITAL LETTER THORN WITH STROKE THROUGH DESCENDER +# A767 valid # LATIN SMALL LETTER THORN WITH STROKE THROUGH DESCENDER +A768 >A769 # LATIN CAPITAL LETTER VEND +# A769 valid # LATIN SMALL LETTER VEND +A76A >A76B # LATIN CAPITAL LETTER ET +# A76B valid # LATIN SMALL LETTER ET +A76C >A76D # LATIN CAPITAL LETTER IS +# A76D valid # LATIN SMALL LETTER IS +A76E >A76F # LATIN CAPITAL LETTER CON +# A76F valid # LATIN SMALL LETTER CON +A770 >A76F # MODIFIER LETTER US +# A771..A778 valid # LATIN SMALL LETTER DUM..LATIN SMALL LETTER UM +A779 >A77A # LATIN CAPITAL LETTER INSULAR D +# A77A valid # LATIN SMALL LETTER INSULAR D +A77B >A77C # LATIN CAPITAL LETTER INSULAR F +# A77C valid # LATIN SMALL LETTER INSULAR F +A77D >1D79 # LATIN CAPITAL LETTER INSULAR G +A77E >A77F # LATIN CAPITAL LETTER TURNED INSULAR G +# A77F valid # LATIN SMALL LETTER TURNED INSULAR G +A780 >A781 # LATIN CAPITAL LETTER TURNED L +# A781 valid # LATIN SMALL LETTER TURNED L +A782 >A783 # LATIN CAPITAL LETTER INSULAR R +# A783 valid # LATIN SMALL LETTER INSULAR R +A784 >A785 # LATIN CAPITAL LETTER INSULAR S +# A785 valid # LATIN SMALL LETTER INSULAR S +A786 >A787 # LATIN CAPITAL LETTER INSULAR T +# A787..A78A valid # LATIN SMALL LETTER INSULAR T..MODIFIER LETTER SHORT EQUALS SIGN +A78B >A78C # LATIN CAPITAL LETTER SALTILLO +# A78C valid # LATIN SMALL LETTER SALTILLO +A78D..A7FA >FFFD # .. +# A7FB..A82B valid # LATIN EPIGRAPHIC LETTER REVERSED F..SYLOTI NAGRI POETRY MARK-4 +A82C..A82F >FFFD # .. +# A830..A839 valid # NORTH INDIC FRACTION ONE QUARTER..NORTH INDIC QUANTITY MARK +A83A..A83F >FFFD # .. +# A840..A877 valid # PHAGS-PA LETTER KA..PHAGS-PA MARK DOUBLE SHAD +A878..A87F >FFFD # .. +# A880..A8C4 valid # SAURASHTRA SIGN ANUSVARA..SAURASHTRA SIGN VIRAMA +A8C5..A8CD >FFFD # .. +# A8CE..A8D9 valid # SAURASHTRA DANDA..SAURASHTRA DIGIT NINE +A8DA..A8DF >FFFD # .. +# A8E0..A8FB valid # COMBINING DEVANAGARI DIGIT ZERO..DEVANAGARI HEADSTROKE +A8FC..A8FF >FFFD # .. +# A900..A953 valid # KAYAH LI DIGIT ZERO..REJANG VIRAMA +A954..A95E >FFFD # .. +# A95F..A97C valid # REJANG SECTION MARK..HANGUL CHOSEONG SSANGYEORINHIEUH +A97D..A97F >FFFD # .. +# A980..A9CD valid # JAVANESE SIGN PANYANGGA..JAVANESE TURNED PADA PISELEH +A9CE >FFFD # +# A9CF..A9D9 valid # JAVANESE PANGRANGKEP..JAVANESE DIGIT NINE +A9DA..A9DD >FFFD # .. +# A9DE..A9DF valid # JAVANESE PADA TIRTA TUMETES..JAVANESE PADA ISEN-ISEN +A9E0..A9FF >FFFD # .. +# AA00..AA36 valid # CHAM LETTER A..CHAM CONSONANT SIGN WA +AA37..AA3F >FFFD # .. +# AA40..AA4D valid # CHAM LETTER FINAL K..CHAM CONSONANT SIGN FINAL H +AA4E..AA4F >FFFD # .. +# AA50..AA59 valid # CHAM DIGIT ZERO..CHAM DIGIT NINE +AA5A..AA5B >FFFD # .. +# AA5C..AA7B valid # CHAM PUNCTUATION SPIRAL..MYANMAR SIGN PAO KAREN TONE +AA7C..AA7F >FFFD # .. +# AA80..AAC2 valid # TAI VIET LETTER LOW KO..TAI VIET TONE MAI SONG +AAC3..AADA >FFFD # .. +# AADB..AADF valid # TAI VIET SYMBOL KON..TAI VIET SYMBOL KOI KOI +AAE0..ABBF >FFFD # .. +# ABC0..ABED valid # MEETEI MAYEK LETTER KOK..MEETEI MAYEK APUN IYEK +ABEE..ABEF >FFFD # .. +# ABF0..ABF9 valid # MEETEI MAYEK DIGIT ZERO..MEETEI MAYEK DIGIT NINE +ABFA..ABFF >FFFD # .. +# AC00..D7A3 valid # HANGUL SYLLABLE GA..HANGUL SYLLABLE HIH +D7A4..D7AF >FFFD # .. +# D7B0..D7C6 valid # HANGUL JUNGSEONG O-YEO..HANGUL JUNGSEONG ARAEA-E +D7C7..D7CA >FFFD # .. +# D7CB..D7FB valid # HANGUL JONGSEONG NIEUN-RIEUL..HANGUL JONGSEONG PHIEUPH-THIEUTH +D7FC..D7FF >FFFD # .. +D800..F8FF >FFFD # .. +F900 >8C48 # CJK COMPATIBILITY IDEOGRAPH-F900 +F901 >66F4 # CJK COMPATIBILITY IDEOGRAPH-F901 +F902 >8ECA # CJK COMPATIBILITY IDEOGRAPH-F902 +F903 >8CC8 # CJK COMPATIBILITY IDEOGRAPH-F903 +F904 >6ED1 # CJK COMPATIBILITY IDEOGRAPH-F904 +F905 >4E32 # CJK COMPATIBILITY IDEOGRAPH-F905 +F906 >53E5 # CJK COMPATIBILITY IDEOGRAPH-F906 +F907..F908 >9F9C # CJK COMPATIBILITY IDEOGRAPH-F907..CJK COMPATIBILITY IDEOGRAPH-F908 +F909 >5951 # CJK COMPATIBILITY IDEOGRAPH-F909 +F90A >91D1 # CJK COMPATIBILITY IDEOGRAPH-F90A +F90B >5587 # CJK COMPATIBILITY IDEOGRAPH-F90B +F90C >5948 # CJK COMPATIBILITY IDEOGRAPH-F90C +F90D >61F6 # CJK COMPATIBILITY IDEOGRAPH-F90D +F90E >7669 # CJK COMPATIBILITY IDEOGRAPH-F90E +F90F >7F85 # CJK COMPATIBILITY IDEOGRAPH-F90F +F910 >863F # CJK COMPATIBILITY IDEOGRAPH-F910 +F911 >87BA # CJK COMPATIBILITY IDEOGRAPH-F911 +F912 >88F8 # CJK COMPATIBILITY IDEOGRAPH-F912 +F913 >908F # CJK COMPATIBILITY IDEOGRAPH-F913 +F914 >6A02 # CJK COMPATIBILITY IDEOGRAPH-F914 +F915 >6D1B # CJK COMPATIBILITY IDEOGRAPH-F915 +F916 >70D9 # CJK COMPATIBILITY IDEOGRAPH-F916 +F917 >73DE # CJK COMPATIBILITY IDEOGRAPH-F917 +F918 >843D # CJK COMPATIBILITY IDEOGRAPH-F918 +F919 >916A # CJK COMPATIBILITY IDEOGRAPH-F919 +F91A >99F1 # CJK COMPATIBILITY IDEOGRAPH-F91A +F91B >4E82 # CJK COMPATIBILITY IDEOGRAPH-F91B +F91C >5375 # CJK COMPATIBILITY IDEOGRAPH-F91C +F91D >6B04 # CJK COMPATIBILITY IDEOGRAPH-F91D +F91E >721B # CJK COMPATIBILITY IDEOGRAPH-F91E +F91F >862D # CJK COMPATIBILITY IDEOGRAPH-F91F +F920 >9E1E # CJK COMPATIBILITY IDEOGRAPH-F920 +F921 >5D50 # CJK COMPATIBILITY IDEOGRAPH-F921 +F922 >6FEB # CJK COMPATIBILITY IDEOGRAPH-F922 +F923 >85CD # CJK COMPATIBILITY IDEOGRAPH-F923 +F924 >8964 # CJK COMPATIBILITY IDEOGRAPH-F924 +F925 >62C9 # CJK COMPATIBILITY IDEOGRAPH-F925 +F926 >81D8 # CJK COMPATIBILITY IDEOGRAPH-F926 +F927 >881F # CJK COMPATIBILITY IDEOGRAPH-F927 +F928 >5ECA # CJK COMPATIBILITY IDEOGRAPH-F928 +F929 >6717 # CJK COMPATIBILITY IDEOGRAPH-F929 +F92A >6D6A # CJK COMPATIBILITY IDEOGRAPH-F92A +F92B >72FC # CJK COMPATIBILITY IDEOGRAPH-F92B +F92C >90CE # CJK COMPATIBILITY IDEOGRAPH-F92C +F92D >4F86 # CJK COMPATIBILITY IDEOGRAPH-F92D +F92E >51B7 # CJK COMPATIBILITY IDEOGRAPH-F92E +F92F >52DE # CJK COMPATIBILITY IDEOGRAPH-F92F +F930 >64C4 # CJK COMPATIBILITY IDEOGRAPH-F930 +F931 >6AD3 # CJK COMPATIBILITY IDEOGRAPH-F931 +F932 >7210 # CJK COMPATIBILITY IDEOGRAPH-F932 +F933 >76E7 # CJK COMPATIBILITY IDEOGRAPH-F933 +F934 >8001 # CJK COMPATIBILITY IDEOGRAPH-F934 +F935 >8606 # CJK COMPATIBILITY IDEOGRAPH-F935 +F936 >865C # CJK COMPATIBILITY IDEOGRAPH-F936 +F937 >8DEF # CJK COMPATIBILITY IDEOGRAPH-F937 +F938 >9732 # CJK COMPATIBILITY IDEOGRAPH-F938 +F939 >9B6F # CJK COMPATIBILITY IDEOGRAPH-F939 +F93A >9DFA # CJK COMPATIBILITY IDEOGRAPH-F93A +F93B >788C # CJK COMPATIBILITY IDEOGRAPH-F93B +F93C >797F # CJK COMPATIBILITY IDEOGRAPH-F93C +F93D >7DA0 # CJK COMPATIBILITY IDEOGRAPH-F93D +F93E >83C9 # CJK COMPATIBILITY IDEOGRAPH-F93E +F93F >9304 # CJK COMPATIBILITY IDEOGRAPH-F93F +F940 >9E7F # CJK COMPATIBILITY IDEOGRAPH-F940 +F941 >8AD6 # CJK COMPATIBILITY IDEOGRAPH-F941 +F942 >58DF # CJK COMPATIBILITY IDEOGRAPH-F942 +F943 >5F04 # CJK COMPATIBILITY IDEOGRAPH-F943 +F944 >7C60 # CJK COMPATIBILITY IDEOGRAPH-F944 +F945 >807E # CJK COMPATIBILITY IDEOGRAPH-F945 +F946 >7262 # CJK COMPATIBILITY IDEOGRAPH-F946 +F947 >78CA # CJK COMPATIBILITY IDEOGRAPH-F947 +F948 >8CC2 # CJK COMPATIBILITY IDEOGRAPH-F948 +F949 >96F7 # CJK COMPATIBILITY IDEOGRAPH-F949 +F94A >58D8 # CJK COMPATIBILITY IDEOGRAPH-F94A +F94B >5C62 # CJK COMPATIBILITY IDEOGRAPH-F94B +F94C >6A13 # CJK COMPATIBILITY IDEOGRAPH-F94C +F94D >6DDA # CJK COMPATIBILITY IDEOGRAPH-F94D +F94E >6F0F # CJK COMPATIBILITY IDEOGRAPH-F94E +F94F >7D2F # CJK COMPATIBILITY IDEOGRAPH-F94F +F950 >7E37 # CJK COMPATIBILITY IDEOGRAPH-F950 +F951 >964B # CJK COMPATIBILITY IDEOGRAPH-F951 +F952 >52D2 # CJK COMPATIBILITY IDEOGRAPH-F952 +F953 >808B # CJK COMPATIBILITY IDEOGRAPH-F953 +F954 >51DC # CJK COMPATIBILITY IDEOGRAPH-F954 +F955 >51CC # CJK COMPATIBILITY IDEOGRAPH-F955 +F956 >7A1C # CJK COMPATIBILITY IDEOGRAPH-F956 +F957 >7DBE # CJK COMPATIBILITY IDEOGRAPH-F957 +F958 >83F1 # CJK COMPATIBILITY IDEOGRAPH-F958 +F959 >9675 # CJK COMPATIBILITY IDEOGRAPH-F959 +F95A >8B80 # CJK COMPATIBILITY IDEOGRAPH-F95A +F95B >62CF # CJK COMPATIBILITY IDEOGRAPH-F95B +F95C >6A02 # CJK COMPATIBILITY IDEOGRAPH-F95C +F95D >8AFE # CJK COMPATIBILITY IDEOGRAPH-F95D +F95E >4E39 # CJK COMPATIBILITY IDEOGRAPH-F95E +F95F >5BE7 # CJK COMPATIBILITY IDEOGRAPH-F95F +F960 >6012 # CJK COMPATIBILITY IDEOGRAPH-F960 +F961 >7387 # CJK COMPATIBILITY IDEOGRAPH-F961 +F962 >7570 # CJK COMPATIBILITY IDEOGRAPH-F962 +F963 >5317 # CJK COMPATIBILITY IDEOGRAPH-F963 +F964 >78FB # CJK COMPATIBILITY IDEOGRAPH-F964 +F965 >4FBF # CJK COMPATIBILITY IDEOGRAPH-F965 +F966 >5FA9 # CJK COMPATIBILITY IDEOGRAPH-F966 +F967 >4E0D # CJK COMPATIBILITY IDEOGRAPH-F967 +F968 >6CCC # CJK COMPATIBILITY IDEOGRAPH-F968 +F969 >6578 # CJK COMPATIBILITY IDEOGRAPH-F969 +F96A >7D22 # CJK COMPATIBILITY IDEOGRAPH-F96A +F96B >53C3 # CJK COMPATIBILITY IDEOGRAPH-F96B +F96C >585E # CJK COMPATIBILITY IDEOGRAPH-F96C +F96D >7701 # CJK COMPATIBILITY IDEOGRAPH-F96D +F96E >8449 # CJK COMPATIBILITY IDEOGRAPH-F96E +F96F >8AAA # CJK COMPATIBILITY IDEOGRAPH-F96F +F970 >6BBA # CJK COMPATIBILITY IDEOGRAPH-F970 +F971 >8FB0 # CJK COMPATIBILITY IDEOGRAPH-F971 +F972 >6C88 # CJK COMPATIBILITY IDEOGRAPH-F972 +F973 >62FE # CJK COMPATIBILITY IDEOGRAPH-F973 +F974 >82E5 # CJK COMPATIBILITY IDEOGRAPH-F974 +F975 >63A0 # CJK COMPATIBILITY IDEOGRAPH-F975 +F976 >7565 # CJK COMPATIBILITY IDEOGRAPH-F976 +F977 >4EAE # CJK COMPATIBILITY IDEOGRAPH-F977 +F978 >5169 # CJK COMPATIBILITY IDEOGRAPH-F978 +F979 >51C9 # CJK COMPATIBILITY IDEOGRAPH-F979 +F97A >6881 # CJK COMPATIBILITY IDEOGRAPH-F97A +F97B >7CE7 # CJK COMPATIBILITY IDEOGRAPH-F97B +F97C >826F # CJK COMPATIBILITY IDEOGRAPH-F97C +F97D >8AD2 # CJK COMPATIBILITY IDEOGRAPH-F97D +F97E >91CF # CJK COMPATIBILITY IDEOGRAPH-F97E +F97F >52F5 # CJK COMPATIBILITY IDEOGRAPH-F97F +F980 >5442 # CJK COMPATIBILITY IDEOGRAPH-F980 +F981 >5973 # CJK COMPATIBILITY IDEOGRAPH-F981 +F982 >5EEC # CJK COMPATIBILITY IDEOGRAPH-F982 +F983 >65C5 # CJK COMPATIBILITY IDEOGRAPH-F983 +F984 >6FFE # CJK COMPATIBILITY IDEOGRAPH-F984 +F985 >792A # CJK COMPATIBILITY IDEOGRAPH-F985 +F986 >95AD # CJK COMPATIBILITY IDEOGRAPH-F986 +F987 >9A6A # CJK COMPATIBILITY IDEOGRAPH-F987 +F988 >9E97 # CJK COMPATIBILITY IDEOGRAPH-F988 +F989 >9ECE # CJK COMPATIBILITY IDEOGRAPH-F989 +F98A >529B # CJK COMPATIBILITY IDEOGRAPH-F98A +F98B >66C6 # CJK COMPATIBILITY IDEOGRAPH-F98B +F98C >6B77 # CJK COMPATIBILITY IDEOGRAPH-F98C +F98D >8F62 # CJK COMPATIBILITY IDEOGRAPH-F98D +F98E >5E74 # CJK COMPATIBILITY IDEOGRAPH-F98E +F98F >6190 # CJK COMPATIBILITY IDEOGRAPH-F98F +F990 >6200 # CJK COMPATIBILITY IDEOGRAPH-F990 +F991 >649A # CJK COMPATIBILITY IDEOGRAPH-F991 +F992 >6F23 # CJK COMPATIBILITY IDEOGRAPH-F992 +F993 >7149 # CJK COMPATIBILITY IDEOGRAPH-F993 +F994 >7489 # CJK COMPATIBILITY IDEOGRAPH-F994 +F995 >79CA # CJK COMPATIBILITY IDEOGRAPH-F995 +F996 >7DF4 # CJK COMPATIBILITY IDEOGRAPH-F996 +F997 >806F # CJK COMPATIBILITY IDEOGRAPH-F997 +F998 >8F26 # CJK COMPATIBILITY IDEOGRAPH-F998 +F999 >84EE # CJK COMPATIBILITY IDEOGRAPH-F999 +F99A >9023 # CJK COMPATIBILITY IDEOGRAPH-F99A +F99B >934A # CJK COMPATIBILITY IDEOGRAPH-F99B +F99C >5217 # CJK COMPATIBILITY IDEOGRAPH-F99C +F99D >52A3 # CJK COMPATIBILITY IDEOGRAPH-F99D +F99E >54BD # CJK COMPATIBILITY IDEOGRAPH-F99E +F99F >70C8 # CJK COMPATIBILITY IDEOGRAPH-F99F +F9A0 >88C2 # CJK COMPATIBILITY IDEOGRAPH-F9A0 +F9A1 >8AAA # CJK COMPATIBILITY IDEOGRAPH-F9A1 +F9A2 >5EC9 # CJK COMPATIBILITY IDEOGRAPH-F9A2 +F9A3 >5FF5 # CJK COMPATIBILITY IDEOGRAPH-F9A3 +F9A4 >637B # CJK COMPATIBILITY IDEOGRAPH-F9A4 +F9A5 >6BAE # CJK COMPATIBILITY IDEOGRAPH-F9A5 +F9A6 >7C3E # CJK COMPATIBILITY IDEOGRAPH-F9A6 +F9A7 >7375 # CJK COMPATIBILITY IDEOGRAPH-F9A7 +F9A8 >4EE4 # CJK COMPATIBILITY IDEOGRAPH-F9A8 +F9A9 >56F9 # CJK COMPATIBILITY IDEOGRAPH-F9A9 +F9AA >5BE7 # CJK COMPATIBILITY IDEOGRAPH-F9AA +F9AB >5DBA # CJK COMPATIBILITY IDEOGRAPH-F9AB +F9AC >601C # CJK COMPATIBILITY IDEOGRAPH-F9AC +F9AD >73B2 # CJK COMPATIBILITY IDEOGRAPH-F9AD +F9AE >7469 # CJK COMPATIBILITY IDEOGRAPH-F9AE +F9AF >7F9A # CJK COMPATIBILITY IDEOGRAPH-F9AF +F9B0 >8046 # CJK COMPATIBILITY IDEOGRAPH-F9B0 +F9B1 >9234 # CJK COMPATIBILITY IDEOGRAPH-F9B1 +F9B2 >96F6 # CJK COMPATIBILITY IDEOGRAPH-F9B2 +F9B3 >9748 # CJK COMPATIBILITY IDEOGRAPH-F9B3 +F9B4 >9818 # CJK COMPATIBILITY IDEOGRAPH-F9B4 +F9B5 >4F8B # CJK COMPATIBILITY IDEOGRAPH-F9B5 +F9B6 >79AE # CJK COMPATIBILITY IDEOGRAPH-F9B6 +F9B7 >91B4 # CJK COMPATIBILITY IDEOGRAPH-F9B7 +F9B8 >96B8 # CJK COMPATIBILITY IDEOGRAPH-F9B8 +F9B9 >60E1 # CJK COMPATIBILITY IDEOGRAPH-F9B9 +F9BA >4E86 # CJK COMPATIBILITY IDEOGRAPH-F9BA +F9BB >50DA # CJK COMPATIBILITY IDEOGRAPH-F9BB +F9BC >5BEE # CJK COMPATIBILITY IDEOGRAPH-F9BC +F9BD >5C3F # CJK COMPATIBILITY IDEOGRAPH-F9BD +F9BE >6599 # CJK COMPATIBILITY IDEOGRAPH-F9BE +F9BF >6A02 # CJK COMPATIBILITY IDEOGRAPH-F9BF +F9C0 >71CE # CJK COMPATIBILITY IDEOGRAPH-F9C0 +F9C1 >7642 # CJK COMPATIBILITY IDEOGRAPH-F9C1 +F9C2 >84FC # CJK COMPATIBILITY IDEOGRAPH-F9C2 +F9C3 >907C # CJK COMPATIBILITY IDEOGRAPH-F9C3 +F9C4 >9F8D # CJK COMPATIBILITY IDEOGRAPH-F9C4 +F9C5 >6688 # CJK COMPATIBILITY IDEOGRAPH-F9C5 +F9C6 >962E # CJK COMPATIBILITY IDEOGRAPH-F9C6 +F9C7 >5289 # CJK COMPATIBILITY IDEOGRAPH-F9C7 +F9C8 >677B # CJK COMPATIBILITY IDEOGRAPH-F9C8 +F9C9 >67F3 # CJK COMPATIBILITY IDEOGRAPH-F9C9 +F9CA >6D41 # CJK COMPATIBILITY IDEOGRAPH-F9CA +F9CB >6E9C # CJK COMPATIBILITY IDEOGRAPH-F9CB +F9CC >7409 # CJK COMPATIBILITY IDEOGRAPH-F9CC +F9CD >7559 # CJK COMPATIBILITY IDEOGRAPH-F9CD +F9CE >786B # CJK COMPATIBILITY IDEOGRAPH-F9CE +F9CF >7D10 # CJK COMPATIBILITY IDEOGRAPH-F9CF +F9D0 >985E # CJK COMPATIBILITY IDEOGRAPH-F9D0 +F9D1 >516D # CJK COMPATIBILITY IDEOGRAPH-F9D1 +F9D2 >622E # CJK COMPATIBILITY IDEOGRAPH-F9D2 +F9D3 >9678 # CJK COMPATIBILITY IDEOGRAPH-F9D3 +F9D4 >502B # CJK COMPATIBILITY IDEOGRAPH-F9D4 +F9D5 >5D19 # CJK COMPATIBILITY IDEOGRAPH-F9D5 +F9D6 >6DEA # CJK COMPATIBILITY IDEOGRAPH-F9D6 +F9D7 >8F2A # CJK COMPATIBILITY IDEOGRAPH-F9D7 +F9D8 >5F8B # CJK COMPATIBILITY IDEOGRAPH-F9D8 +F9D9 >6144 # CJK COMPATIBILITY IDEOGRAPH-F9D9 +F9DA >6817 # CJK COMPATIBILITY IDEOGRAPH-F9DA +F9DB >7387 # CJK COMPATIBILITY IDEOGRAPH-F9DB +F9DC >9686 # CJK COMPATIBILITY IDEOGRAPH-F9DC +F9DD >5229 # CJK COMPATIBILITY IDEOGRAPH-F9DD +F9DE >540F # CJK COMPATIBILITY IDEOGRAPH-F9DE +F9DF >5C65 # CJK COMPATIBILITY IDEOGRAPH-F9DF +F9E0 >6613 # CJK COMPATIBILITY IDEOGRAPH-F9E0 +F9E1 >674E # CJK COMPATIBILITY IDEOGRAPH-F9E1 +F9E2 >68A8 # CJK COMPATIBILITY IDEOGRAPH-F9E2 +F9E3 >6CE5 # CJK COMPATIBILITY IDEOGRAPH-F9E3 +F9E4 >7406 # CJK COMPATIBILITY IDEOGRAPH-F9E4 +F9E5 >75E2 # CJK COMPATIBILITY IDEOGRAPH-F9E5 +F9E6 >7F79 # CJK COMPATIBILITY IDEOGRAPH-F9E6 +F9E7 >88CF # CJK COMPATIBILITY IDEOGRAPH-F9E7 +F9E8 >88E1 # CJK COMPATIBILITY IDEOGRAPH-F9E8 +F9E9 >91CC # CJK COMPATIBILITY IDEOGRAPH-F9E9 +F9EA >96E2 # CJK COMPATIBILITY IDEOGRAPH-F9EA +F9EB >533F # CJK COMPATIBILITY IDEOGRAPH-F9EB +F9EC >6EBA # CJK COMPATIBILITY IDEOGRAPH-F9EC +F9ED >541D # CJK COMPATIBILITY IDEOGRAPH-F9ED +F9EE >71D0 # CJK COMPATIBILITY IDEOGRAPH-F9EE +F9EF >7498 # CJK COMPATIBILITY IDEOGRAPH-F9EF +F9F0 >85FA # CJK COMPATIBILITY IDEOGRAPH-F9F0 +F9F1 >96A3 # CJK COMPATIBILITY IDEOGRAPH-F9F1 +F9F2 >9C57 # CJK COMPATIBILITY IDEOGRAPH-F9F2 +F9F3 >9E9F # CJK COMPATIBILITY IDEOGRAPH-F9F3 +F9F4 >6797 # CJK COMPATIBILITY IDEOGRAPH-F9F4 +F9F5 >6DCB # CJK COMPATIBILITY IDEOGRAPH-F9F5 +F9F6 >81E8 # CJK COMPATIBILITY IDEOGRAPH-F9F6 +F9F7 >7ACB # CJK COMPATIBILITY IDEOGRAPH-F9F7 +F9F8 >7B20 # CJK COMPATIBILITY IDEOGRAPH-F9F8 +F9F9 >7C92 # CJK COMPATIBILITY IDEOGRAPH-F9F9 +F9FA >72C0 # CJK COMPATIBILITY IDEOGRAPH-F9FA +F9FB >7099 # CJK COMPATIBILITY IDEOGRAPH-F9FB +F9FC >8B58 # CJK COMPATIBILITY IDEOGRAPH-F9FC +F9FD >4EC0 # CJK COMPATIBILITY IDEOGRAPH-F9FD +F9FE >8336 # CJK COMPATIBILITY IDEOGRAPH-F9FE +F9FF >523A # CJK COMPATIBILITY IDEOGRAPH-F9FF +FA00 >5207 # CJK COMPATIBILITY IDEOGRAPH-FA00 +FA01 >5EA6 # CJK COMPATIBILITY IDEOGRAPH-FA01 +FA02 >62D3 # CJK COMPATIBILITY IDEOGRAPH-FA02 +FA03 >7CD6 # CJK COMPATIBILITY IDEOGRAPH-FA03 +FA04 >5B85 # CJK COMPATIBILITY IDEOGRAPH-FA04 +FA05 >6D1E # CJK COMPATIBILITY IDEOGRAPH-FA05 +FA06 >66B4 # CJK COMPATIBILITY IDEOGRAPH-FA06 +FA07 >8F3B # CJK COMPATIBILITY IDEOGRAPH-FA07 +FA08 >884C # CJK COMPATIBILITY IDEOGRAPH-FA08 +FA09 >964D # CJK COMPATIBILITY IDEOGRAPH-FA09 +FA0A >898B # CJK COMPATIBILITY IDEOGRAPH-FA0A +FA0B >5ED3 # CJK COMPATIBILITY IDEOGRAPH-FA0B +FA0C >5140 # CJK COMPATIBILITY IDEOGRAPH-FA0C +FA0D >55C0 # CJK COMPATIBILITY IDEOGRAPH-FA0D +# FA0E..FA0F valid # CJK COMPATIBILITY IDEOGRAPH-FA0E..CJK COMPATIBILITY IDEOGRAPH-FA0F +FA10 >585A # CJK COMPATIBILITY IDEOGRAPH-FA10 +# FA11 valid # CJK COMPATIBILITY IDEOGRAPH-FA11 +FA12 >6674 # CJK COMPATIBILITY IDEOGRAPH-FA12 +# FA13..FA14 valid # CJK COMPATIBILITY IDEOGRAPH-FA13..CJK COMPATIBILITY IDEOGRAPH-FA14 +FA15 >51DE # CJK COMPATIBILITY IDEOGRAPH-FA15 +FA16 >732A # CJK COMPATIBILITY IDEOGRAPH-FA16 +FA17 >76CA # CJK COMPATIBILITY IDEOGRAPH-FA17 +FA18 >793C # CJK COMPATIBILITY IDEOGRAPH-FA18 +FA19 >795E # CJK COMPATIBILITY IDEOGRAPH-FA19 +FA1A >7965 # CJK COMPATIBILITY IDEOGRAPH-FA1A +FA1B >798F # CJK COMPATIBILITY IDEOGRAPH-FA1B +FA1C >9756 # CJK COMPATIBILITY IDEOGRAPH-FA1C +FA1D >7CBE # CJK COMPATIBILITY IDEOGRAPH-FA1D +FA1E >7FBD # CJK COMPATIBILITY IDEOGRAPH-FA1E +# FA1F valid # CJK COMPATIBILITY IDEOGRAPH-FA1F +FA20 >8612 # CJK COMPATIBILITY IDEOGRAPH-FA20 +# FA21 valid # CJK COMPATIBILITY IDEOGRAPH-FA21 +FA22 >8AF8 # CJK COMPATIBILITY IDEOGRAPH-FA22 +# FA23..FA24 valid # CJK COMPATIBILITY IDEOGRAPH-FA23..CJK COMPATIBILITY IDEOGRAPH-FA24 +FA25 >9038 # CJK COMPATIBILITY IDEOGRAPH-FA25 +FA26 >90FD # CJK COMPATIBILITY IDEOGRAPH-FA26 +# FA27..FA29 valid # CJK COMPATIBILITY IDEOGRAPH-FA27..CJK COMPATIBILITY IDEOGRAPH-FA29 +FA2A >98EF # CJK COMPATIBILITY IDEOGRAPH-FA2A +FA2B >98FC # CJK COMPATIBILITY IDEOGRAPH-FA2B +FA2C >9928 # CJK COMPATIBILITY IDEOGRAPH-FA2C +FA2D >9DB4 # CJK COMPATIBILITY IDEOGRAPH-FA2D +FA2E..FA2F >FFFD # .. +FA30 >4FAE # CJK COMPATIBILITY IDEOGRAPH-FA30 +FA31 >50E7 # CJK COMPATIBILITY IDEOGRAPH-FA31 +FA32 >514D # CJK COMPATIBILITY IDEOGRAPH-FA32 +FA33 >52C9 # CJK COMPATIBILITY IDEOGRAPH-FA33 +FA34 >52E4 # CJK COMPATIBILITY IDEOGRAPH-FA34 +FA35 >5351 # CJK COMPATIBILITY IDEOGRAPH-FA35 +FA36 >559D # CJK COMPATIBILITY IDEOGRAPH-FA36 +FA37 >5606 # CJK COMPATIBILITY IDEOGRAPH-FA37 +FA38 >5668 # CJK COMPATIBILITY IDEOGRAPH-FA38 +FA39 >5840 # CJK COMPATIBILITY IDEOGRAPH-FA39 +FA3A >58A8 # CJK COMPATIBILITY IDEOGRAPH-FA3A +FA3B >5C64 # CJK COMPATIBILITY IDEOGRAPH-FA3B +FA3C >5C6E # CJK COMPATIBILITY IDEOGRAPH-FA3C +FA3D >6094 # CJK COMPATIBILITY IDEOGRAPH-FA3D +FA3E >6168 # CJK COMPATIBILITY IDEOGRAPH-FA3E +FA3F >618E # CJK COMPATIBILITY IDEOGRAPH-FA3F +FA40 >61F2 # CJK COMPATIBILITY IDEOGRAPH-FA40 +FA41 >654F # CJK COMPATIBILITY IDEOGRAPH-FA41 +FA42 >65E2 # CJK COMPATIBILITY IDEOGRAPH-FA42 +FA43 >6691 # CJK COMPATIBILITY IDEOGRAPH-FA43 +FA44 >6885 # CJK COMPATIBILITY IDEOGRAPH-FA44 +FA45 >6D77 # CJK COMPATIBILITY IDEOGRAPH-FA45 +FA46 >6E1A # CJK COMPATIBILITY IDEOGRAPH-FA46 +FA47 >6F22 # CJK COMPATIBILITY IDEOGRAPH-FA47 +FA48 >716E # CJK COMPATIBILITY IDEOGRAPH-FA48 +FA49 >722B # CJK COMPATIBILITY IDEOGRAPH-FA49 +FA4A >7422 # CJK COMPATIBILITY IDEOGRAPH-FA4A +FA4B >7891 # CJK COMPATIBILITY IDEOGRAPH-FA4B +FA4C >793E # CJK COMPATIBILITY IDEOGRAPH-FA4C +FA4D >7949 # CJK COMPATIBILITY IDEOGRAPH-FA4D +FA4E >7948 # CJK COMPATIBILITY IDEOGRAPH-FA4E +FA4F >7950 # CJK COMPATIBILITY IDEOGRAPH-FA4F +FA50 >7956 # CJK COMPATIBILITY IDEOGRAPH-FA50 +FA51 >795D # CJK COMPATIBILITY IDEOGRAPH-FA51 +FA52 >798D # CJK COMPATIBILITY IDEOGRAPH-FA52 +FA53 >798E # CJK COMPATIBILITY IDEOGRAPH-FA53 +FA54 >7A40 # CJK COMPATIBILITY IDEOGRAPH-FA54 +FA55 >7A81 # CJK COMPATIBILITY IDEOGRAPH-FA55 +FA56 >7BC0 # CJK COMPATIBILITY IDEOGRAPH-FA56 +FA57 >7DF4 # CJK COMPATIBILITY IDEOGRAPH-FA57 +FA58 >7E09 # CJK COMPATIBILITY IDEOGRAPH-FA58 +FA59 >7E41 # CJK COMPATIBILITY IDEOGRAPH-FA59 +FA5A >7F72 # CJK COMPATIBILITY IDEOGRAPH-FA5A +FA5B >8005 # CJK COMPATIBILITY IDEOGRAPH-FA5B +FA5C >81ED # CJK COMPATIBILITY IDEOGRAPH-FA5C +FA5D..FA5E >8279 # CJK COMPATIBILITY IDEOGRAPH-FA5D..CJK COMPATIBILITY IDEOGRAPH-FA5E +FA5F >8457 # CJK COMPATIBILITY IDEOGRAPH-FA5F +FA60 >8910 # CJK COMPATIBILITY IDEOGRAPH-FA60 +FA61 >8996 # CJK COMPATIBILITY IDEOGRAPH-FA61 +FA62 >8B01 # CJK COMPATIBILITY IDEOGRAPH-FA62 +FA63 >8B39 # CJK COMPATIBILITY IDEOGRAPH-FA63 +FA64 >8CD3 # CJK COMPATIBILITY IDEOGRAPH-FA64 +FA65 >8D08 # CJK COMPATIBILITY IDEOGRAPH-FA65 +FA66 >8FB6 # CJK COMPATIBILITY IDEOGRAPH-FA66 +FA67 >9038 # CJK COMPATIBILITY IDEOGRAPH-FA67 +FA68 >96E3 # CJK COMPATIBILITY IDEOGRAPH-FA68 +FA69 >97FF # CJK COMPATIBILITY IDEOGRAPH-FA69 +FA6A >983B # CJK COMPATIBILITY IDEOGRAPH-FA6A +FA6B >6075 # CJK COMPATIBILITY IDEOGRAPH-FA6B +FA6C >242EE # CJK COMPATIBILITY IDEOGRAPH-FA6C +FA6D >8218 # CJK COMPATIBILITY IDEOGRAPH-FA6D +FA6E..FA6F >FFFD # .. +FA70 >4E26 # CJK COMPATIBILITY IDEOGRAPH-FA70 +FA71 >51B5 # CJK COMPATIBILITY IDEOGRAPH-FA71 +FA72 >5168 # CJK COMPATIBILITY IDEOGRAPH-FA72 +FA73 >4F80 # CJK COMPATIBILITY IDEOGRAPH-FA73 +FA74 >5145 # CJK COMPATIBILITY IDEOGRAPH-FA74 +FA75 >5180 # CJK COMPATIBILITY IDEOGRAPH-FA75 +FA76 >52C7 # CJK COMPATIBILITY IDEOGRAPH-FA76 +FA77 >52FA # CJK COMPATIBILITY IDEOGRAPH-FA77 +FA78 >559D # CJK COMPATIBILITY IDEOGRAPH-FA78 +FA79 >5555 # CJK COMPATIBILITY IDEOGRAPH-FA79 +FA7A >5599 # CJK COMPATIBILITY IDEOGRAPH-FA7A +FA7B >55E2 # CJK COMPATIBILITY IDEOGRAPH-FA7B +FA7C >585A # CJK COMPATIBILITY IDEOGRAPH-FA7C +FA7D >58B3 # CJK COMPATIBILITY IDEOGRAPH-FA7D +FA7E >5944 # CJK COMPATIBILITY IDEOGRAPH-FA7E +FA7F >5954 # CJK COMPATIBILITY IDEOGRAPH-FA7F +FA80 >5A62 # CJK COMPATIBILITY IDEOGRAPH-FA80 +FA81 >5B28 # CJK COMPATIBILITY IDEOGRAPH-FA81 +FA82 >5ED2 # CJK COMPATIBILITY IDEOGRAPH-FA82 +FA83 >5ED9 # CJK COMPATIBILITY IDEOGRAPH-FA83 +FA84 >5F69 # CJK COMPATIBILITY IDEOGRAPH-FA84 +FA85 >5FAD # CJK COMPATIBILITY IDEOGRAPH-FA85 +FA86 >60D8 # CJK COMPATIBILITY IDEOGRAPH-FA86 +FA87 >614E # CJK COMPATIBILITY IDEOGRAPH-FA87 +FA88 >6108 # CJK COMPATIBILITY IDEOGRAPH-FA88 +FA89 >618E # CJK COMPATIBILITY IDEOGRAPH-FA89 +FA8A >6160 # CJK COMPATIBILITY IDEOGRAPH-FA8A +FA8B >61F2 # CJK COMPATIBILITY IDEOGRAPH-FA8B +FA8C >6234 # CJK COMPATIBILITY IDEOGRAPH-FA8C +FA8D >63C4 # CJK COMPATIBILITY IDEOGRAPH-FA8D +FA8E >641C # CJK COMPATIBILITY IDEOGRAPH-FA8E +FA8F >6452 # CJK COMPATIBILITY IDEOGRAPH-FA8F +FA90 >6556 # CJK COMPATIBILITY IDEOGRAPH-FA90 +FA91 >6674 # CJK COMPATIBILITY IDEOGRAPH-FA91 +FA92 >6717 # CJK COMPATIBILITY IDEOGRAPH-FA92 +FA93 >671B # CJK COMPATIBILITY IDEOGRAPH-FA93 +FA94 >6756 # CJK COMPATIBILITY IDEOGRAPH-FA94 +FA95 >6B79 # CJK COMPATIBILITY IDEOGRAPH-FA95 +FA96 >6BBA # CJK COMPATIBILITY IDEOGRAPH-FA96 +FA97 >6D41 # CJK COMPATIBILITY IDEOGRAPH-FA97 +FA98 >6EDB # CJK COMPATIBILITY IDEOGRAPH-FA98 +FA99 >6ECB # CJK COMPATIBILITY IDEOGRAPH-FA99 +FA9A >6F22 # CJK COMPATIBILITY IDEOGRAPH-FA9A +FA9B >701E # CJK COMPATIBILITY IDEOGRAPH-FA9B +FA9C >716E # CJK COMPATIBILITY IDEOGRAPH-FA9C +FA9D >77A7 # CJK COMPATIBILITY IDEOGRAPH-FA9D +FA9E >7235 # CJK COMPATIBILITY IDEOGRAPH-FA9E +FA9F >72AF # CJK COMPATIBILITY IDEOGRAPH-FA9F +FAA0 >732A # CJK COMPATIBILITY IDEOGRAPH-FAA0 +FAA1 >7471 # CJK COMPATIBILITY IDEOGRAPH-FAA1 +FAA2 >7506 # CJK COMPATIBILITY IDEOGRAPH-FAA2 +FAA3 >753B # CJK COMPATIBILITY IDEOGRAPH-FAA3 +FAA4 >761D # CJK COMPATIBILITY IDEOGRAPH-FAA4 +FAA5 >761F # CJK COMPATIBILITY IDEOGRAPH-FAA5 +FAA6 >76CA # CJK COMPATIBILITY IDEOGRAPH-FAA6 +FAA7 >76DB # CJK COMPATIBILITY IDEOGRAPH-FAA7 +FAA8 >76F4 # CJK COMPATIBILITY IDEOGRAPH-FAA8 +FAA9 >774A # CJK COMPATIBILITY IDEOGRAPH-FAA9 +FAAA >7740 # CJK COMPATIBILITY IDEOGRAPH-FAAA +FAAB >78CC # CJK COMPATIBILITY IDEOGRAPH-FAAB +FAAC >7AB1 # CJK COMPATIBILITY IDEOGRAPH-FAAC +FAAD >7BC0 # CJK COMPATIBILITY IDEOGRAPH-FAAD +FAAE >7C7B # CJK COMPATIBILITY IDEOGRAPH-FAAE +FAAF >7D5B # CJK COMPATIBILITY IDEOGRAPH-FAAF +FAB0 >7DF4 # CJK COMPATIBILITY IDEOGRAPH-FAB0 +FAB1 >7F3E # CJK COMPATIBILITY IDEOGRAPH-FAB1 +FAB2 >8005 # CJK COMPATIBILITY IDEOGRAPH-FAB2 +FAB3 >8352 # CJK COMPATIBILITY IDEOGRAPH-FAB3 +FAB4 >83EF # CJK COMPATIBILITY IDEOGRAPH-FAB4 +FAB5 >8779 # CJK COMPATIBILITY IDEOGRAPH-FAB5 +FAB6 >8941 # CJK COMPATIBILITY IDEOGRAPH-FAB6 +FAB7 >8986 # CJK COMPATIBILITY IDEOGRAPH-FAB7 +FAB8 >8996 # CJK COMPATIBILITY IDEOGRAPH-FAB8 +FAB9 >8ABF # CJK COMPATIBILITY IDEOGRAPH-FAB9 +FABA >8AF8 # CJK COMPATIBILITY IDEOGRAPH-FABA +FABB >8ACB # CJK COMPATIBILITY IDEOGRAPH-FABB +FABC >8B01 # CJK COMPATIBILITY IDEOGRAPH-FABC +FABD >8AFE # CJK COMPATIBILITY IDEOGRAPH-FABD +FABE >8AED # CJK COMPATIBILITY IDEOGRAPH-FABE +FABF >8B39 # CJK COMPATIBILITY IDEOGRAPH-FABF +FAC0 >8B8A # CJK COMPATIBILITY IDEOGRAPH-FAC0 +FAC1 >8D08 # CJK COMPATIBILITY IDEOGRAPH-FAC1 +FAC2 >8F38 # CJK COMPATIBILITY IDEOGRAPH-FAC2 +FAC3 >9072 # CJK COMPATIBILITY IDEOGRAPH-FAC3 +FAC4 >9199 # CJK COMPATIBILITY IDEOGRAPH-FAC4 +FAC5 >9276 # CJK COMPATIBILITY IDEOGRAPH-FAC5 +FAC6 >967C # CJK COMPATIBILITY IDEOGRAPH-FAC6 +FAC7 >96E3 # CJK COMPATIBILITY IDEOGRAPH-FAC7 +FAC8 >9756 # CJK COMPATIBILITY IDEOGRAPH-FAC8 +FAC9 >97DB # CJK COMPATIBILITY IDEOGRAPH-FAC9 +FACA >97FF # CJK COMPATIBILITY IDEOGRAPH-FACA +FACB >980B # CJK COMPATIBILITY IDEOGRAPH-FACB +FACC >983B # CJK COMPATIBILITY IDEOGRAPH-FACC +FACD >9B12 # CJK COMPATIBILITY IDEOGRAPH-FACD +FACE >9F9C # CJK COMPATIBILITY IDEOGRAPH-FACE +FACF >2284A # CJK COMPATIBILITY IDEOGRAPH-FACF +FAD0 >22844 # CJK COMPATIBILITY IDEOGRAPH-FAD0 +FAD1 >233D5 # CJK COMPATIBILITY IDEOGRAPH-FAD1 +FAD2 >3B9D # CJK COMPATIBILITY IDEOGRAPH-FAD2 +FAD3 >4018 # CJK COMPATIBILITY IDEOGRAPH-FAD3 +FAD4 >4039 # CJK COMPATIBILITY IDEOGRAPH-FAD4 +FAD5 >25249 # CJK COMPATIBILITY IDEOGRAPH-FAD5 +FAD6 >25CD0 # CJK COMPATIBILITY IDEOGRAPH-FAD6 +FAD7 >27ED3 # CJK COMPATIBILITY IDEOGRAPH-FAD7 +FAD8 >9F43 # CJK COMPATIBILITY IDEOGRAPH-FAD8 +FAD9 >9F8E # CJK COMPATIBILITY IDEOGRAPH-FAD9 +FADA..FAFF >FFFD # .. +FB00 >0066 0066 # LATIN SMALL LIGATURE FF +FB01 >0066 0069 # LATIN SMALL LIGATURE FI +FB02 >0066 006C # LATIN SMALL LIGATURE FL +FB03 >0066 0066 0069 # LATIN SMALL LIGATURE FFI +FB04 >0066 0066 006C # LATIN SMALL LIGATURE FFL +FB05..FB06 >0073 0074 # LATIN SMALL LIGATURE LONG S T..LATIN SMALL LIGATURE ST +FB07..FB12 >FFFD # .. +FB13 >0574 0576 # ARMENIAN SMALL LIGATURE MEN NOW +FB14 >0574 0565 # ARMENIAN SMALL LIGATURE MEN ECH +FB15 >0574 056B # ARMENIAN SMALL LIGATURE MEN INI +FB16 >057E 0576 # ARMENIAN SMALL LIGATURE VEW NOW +FB17 >0574 056D # ARMENIAN SMALL LIGATURE MEN XEH +FB18..FB1C >FFFD # .. +FB1D >05D9 05B4 # HEBREW LETTER YOD WITH HIRIQ +# FB1E valid # HEBREW POINT JUDEO-SPANISH VARIKA +FB1F >05F2 05B7 # HEBREW LIGATURE YIDDISH YOD YOD PATAH +FB20 >05E2 # HEBREW LETTER ALTERNATIVE AYIN +FB21 >05D0 # HEBREW LETTER WIDE ALEF +FB22 >05D3 # HEBREW LETTER WIDE DALET +FB23 >05D4 # HEBREW LETTER WIDE HE +FB24 >05DB # HEBREW LETTER WIDE KAF +FB25 >05DC # HEBREW LETTER WIDE LAMED +FB26 >05DD # HEBREW LETTER WIDE FINAL MEM +FB27 >05E8 # HEBREW LETTER WIDE RESH +FB28 >05EA # HEBREW LETTER WIDE TAV +FB29 >FFFD # HEBREW LETTER ALTERNATIVE PLUS SIGN +FB2A >05E9 05C1 # HEBREW LETTER SHIN WITH SHIN DOT +FB2B >05E9 05C2 # HEBREW LETTER SHIN WITH SIN DOT +FB2C >05E9 05BC 05C1 # HEBREW LETTER SHIN WITH DAGESH AND SHIN DOT +FB2D >05E9 05BC 05C2 # HEBREW LETTER SHIN WITH DAGESH AND SIN DOT +FB2E >05D0 05B7 # HEBREW LETTER ALEF WITH PATAH +FB2F >05D0 05B8 # HEBREW LETTER ALEF WITH QAMATS +FB30 >05D0 05BC # HEBREW LETTER ALEF WITH MAPIQ +FB31 >05D1 05BC # HEBREW LETTER BET WITH DAGESH +FB32 >05D2 05BC # HEBREW LETTER GIMEL WITH DAGESH +FB33 >05D3 05BC # HEBREW LETTER DALET WITH DAGESH +FB34 >05D4 05BC # HEBREW LETTER HE WITH MAPIQ +FB35 >05D5 05BC # HEBREW LETTER VAV WITH DAGESH +FB36 >05D6 05BC # HEBREW LETTER ZAYIN WITH DAGESH +FB37 >FFFD # +FB38 >05D8 05BC # HEBREW LETTER TET WITH DAGESH +FB39 >05D9 05BC # HEBREW LETTER YOD WITH DAGESH +FB3A >05DA 05BC # HEBREW LETTER FINAL KAF WITH DAGESH +FB3B >05DB 05BC # HEBREW LETTER KAF WITH DAGESH +FB3C >05DC 05BC # HEBREW LETTER LAMED WITH DAGESH +FB3D >FFFD # +FB3E >05DE 05BC # HEBREW LETTER MEM WITH DAGESH +FB3F >FFFD # +FB40 >05E0 05BC # HEBREW LETTER NUN WITH DAGESH +FB41 >05E1 05BC # HEBREW LETTER SAMEKH WITH DAGESH +FB42 >FFFD # +FB43 >05E3 05BC # HEBREW LETTER FINAL PE WITH DAGESH +FB44 >05E4 05BC # HEBREW LETTER PE WITH DAGESH +FB45 >FFFD # +FB46 >05E6 05BC # HEBREW LETTER TSADI WITH DAGESH +FB47 >05E7 05BC # HEBREW LETTER QOF WITH DAGESH +FB48 >05E8 05BC # HEBREW LETTER RESH WITH DAGESH +FB49 >05E9 05BC # HEBREW LETTER SHIN WITH DAGESH +FB4A >05EA 05BC # HEBREW LETTER TAV WITH DAGESH +FB4B >05D5 05B9 # HEBREW LETTER VAV WITH HOLAM +FB4C >05D1 05BF # HEBREW LETTER BET WITH RAFE +FB4D >05DB 05BF # HEBREW LETTER KAF WITH RAFE +FB4E >05E4 05BF # HEBREW LETTER PE WITH RAFE +FB4F >05D0 05DC # HEBREW LIGATURE ALEF LAMED +FB50..FB51 >0671 # ARABIC LETTER ALEF WASLA ISOLATED FORM..ARABIC LETTER ALEF WASLA FINAL FORM +FB52..FB55 >067B # ARABIC LETTER BEEH ISOLATED FORM..ARABIC LETTER BEEH MEDIAL FORM +FB56..FB59 >067E # ARABIC LETTER PEH ISOLATED FORM..ARABIC LETTER PEH MEDIAL FORM +FB5A..FB5D >0680 # ARABIC LETTER BEHEH ISOLATED FORM..ARABIC LETTER BEHEH MEDIAL FORM +FB5E..FB61 >067A # ARABIC LETTER TTEHEH ISOLATED FORM..ARABIC LETTER TTEHEH MEDIAL FORM +FB62..FB65 >067F # ARABIC LETTER TEHEH ISOLATED FORM..ARABIC LETTER TEHEH MEDIAL FORM +FB66..FB69 >0679 # ARABIC LETTER TTEH ISOLATED FORM..ARABIC LETTER TTEH MEDIAL FORM +FB6A..FB6D >06A4 # ARABIC LETTER VEH ISOLATED FORM..ARABIC LETTER VEH MEDIAL FORM +FB6E..FB71 >06A6 # ARABIC LETTER PEHEH ISOLATED FORM..ARABIC LETTER PEHEH MEDIAL FORM +FB72..FB75 >0684 # ARABIC LETTER DYEH ISOLATED FORM..ARABIC LETTER DYEH MEDIAL FORM +FB76..FB79 >0683 # ARABIC LETTER NYEH ISOLATED FORM..ARABIC LETTER NYEH MEDIAL FORM +FB7A..FB7D >0686 # ARABIC LETTER TCHEH ISOLATED FORM..ARABIC LETTER TCHEH MEDIAL FORM +FB7E..FB81 >0687 # ARABIC LETTER TCHEHEH ISOLATED FORM..ARABIC LETTER TCHEHEH MEDIAL FORM +FB82..FB83 >068D # ARABIC LETTER DDAHAL ISOLATED FORM..ARABIC LETTER DDAHAL FINAL FORM +FB84..FB85 >068C # ARABIC LETTER DAHAL ISOLATED FORM..ARABIC LETTER DAHAL FINAL FORM +FB86..FB87 >068E # ARABIC LETTER DUL ISOLATED FORM..ARABIC LETTER DUL FINAL FORM +FB88..FB89 >0688 # ARABIC LETTER DDAL ISOLATED FORM..ARABIC LETTER DDAL FINAL FORM +FB8A..FB8B >0698 # ARABIC LETTER JEH ISOLATED FORM..ARABIC LETTER JEH FINAL FORM +FB8C..FB8D >0691 # ARABIC LETTER RREH ISOLATED FORM..ARABIC LETTER RREH FINAL FORM +FB8E..FB91 >06A9 # ARABIC LETTER KEHEH ISOLATED FORM..ARABIC LETTER KEHEH MEDIAL FORM +FB92..FB95 >06AF # ARABIC LETTER GAF ISOLATED FORM..ARABIC LETTER GAF MEDIAL FORM +FB96..FB99 >06B3 # ARABIC LETTER GUEH ISOLATED FORM..ARABIC LETTER GUEH MEDIAL FORM +FB9A..FB9D >06B1 # ARABIC LETTER NGOEH ISOLATED FORM..ARABIC LETTER NGOEH MEDIAL FORM +FB9E..FB9F >06BA # ARABIC LETTER NOON GHUNNA ISOLATED FORM..ARABIC LETTER NOON GHUNNA FINAL FORM +FBA0..FBA3 >06BB # ARABIC LETTER RNOON ISOLATED FORM..ARABIC LETTER RNOON MEDIAL FORM +FBA4..FBA5 >06C0 # ARABIC LETTER HEH WITH YEH ABOVE ISOLATED FORM..ARABIC LETTER HEH WITH YEH ABOVE FINAL FORM +FBA6..FBA9 >06C1 # ARABIC LETTER HEH GOAL ISOLATED FORM..ARABIC LETTER HEH GOAL MEDIAL FORM +FBAA..FBAD >06BE # ARABIC LETTER HEH DOACHASHMEE ISOLATED FORM..ARABIC LETTER HEH DOACHASHMEE MEDIAL FORM +FBAE..FBAF >06D2 # ARABIC LETTER YEH BARREE ISOLATED FORM..ARABIC LETTER YEH BARREE FINAL FORM +FBB0..FBB1 >06D3 # ARABIC LETTER YEH BARREE WITH HAMZA ABOVE ISOLATED FORM..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM +FBB2..FBD2 >FFFD # .. +FBD3..FBD6 >06AD # ARABIC LETTER NG ISOLATED FORM..ARABIC LETTER NG MEDIAL FORM +FBD7..FBD8 >06C7 # ARABIC LETTER U ISOLATED FORM..ARABIC LETTER U FINAL FORM +FBD9..FBDA >06C6 # ARABIC LETTER OE ISOLATED FORM..ARABIC LETTER OE FINAL FORM +FBDB..FBDC >06C8 # ARABIC LETTER YU ISOLATED FORM..ARABIC LETTER YU FINAL FORM +FBDD >06C7 0674 # ARABIC LETTER U WITH HAMZA ABOVE ISOLATED FORM +FBDE..FBDF >06CB # ARABIC LETTER VE ISOLATED FORM..ARABIC LETTER VE FINAL FORM +FBE0..FBE1 >06C5 # ARABIC LETTER KIRGHIZ OE ISOLATED FORM..ARABIC LETTER KIRGHIZ OE FINAL FORM +FBE2..FBE3 >06C9 # ARABIC LETTER KIRGHIZ YU ISOLATED FORM..ARABIC LETTER KIRGHIZ YU FINAL FORM +FBE4..FBE7 >06D0 # ARABIC LETTER E ISOLATED FORM..ARABIC LETTER E MEDIAL FORM +FBE8..FBE9 >0649 # ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA INITIAL FORM..ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA MEDIAL FORM +FBEA..FBEB >0626 0627 # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF ISOLATED FORM..ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF FINAL FORM +FBEC..FBED >0626 06D5 # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE ISOLATED FORM..ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE FINAL FORM +FBEE..FBEF >0626 0648 # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW ISOLATED FORM..ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW FINAL FORM +FBF0..FBF1 >0626 06C7 # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U ISOLATED FORM..ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U FINAL FORM +FBF2..FBF3 >0626 06C6 # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE ISOLATED FORM..ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE FINAL FORM +FBF4..FBF5 >0626 06C8 # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU ISOLATED FORM..ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU FINAL FORM +FBF6..FBF8 >0626 06D0 # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E ISOLATED FORM..ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E INITIAL FORM +FBF9..FBFB >0626 0649 # ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM..ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA INITIAL FORM +FBFC..FBFF >06CC # ARABIC LETTER FARSI YEH ISOLATED FORM..ARABIC LETTER FARSI YEH MEDIAL FORM +FC00 >0626 062C # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM ISOLATED FORM +FC01 >0626 062D # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH ISOLATED FORM +FC02 >0626 0645 # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM ISOLATED FORM +FC03 >0626 0649 # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM +FC04 >0626 064A # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH ISOLATED FORM +FC05 >0628 062C # ARABIC LIGATURE BEH WITH JEEM ISOLATED FORM +FC06 >0628 062D # ARABIC LIGATURE BEH WITH HAH ISOLATED FORM +FC07 >0628 062E # ARABIC LIGATURE BEH WITH KHAH ISOLATED FORM +FC08 >0628 0645 # ARABIC LIGATURE BEH WITH MEEM ISOLATED FORM +FC09 >0628 0649 # ARABIC LIGATURE BEH WITH ALEF MAKSURA ISOLATED FORM +FC0A >0628 064A # ARABIC LIGATURE BEH WITH YEH ISOLATED FORM +FC0B >062A 062C # ARABIC LIGATURE TEH WITH JEEM ISOLATED FORM +FC0C >062A 062D # ARABIC LIGATURE TEH WITH HAH ISOLATED FORM +FC0D >062A 062E # ARABIC LIGATURE TEH WITH KHAH ISOLATED FORM +FC0E >062A 0645 # ARABIC LIGATURE TEH WITH MEEM ISOLATED FORM +FC0F >062A 0649 # ARABIC LIGATURE TEH WITH ALEF MAKSURA ISOLATED FORM +FC10 >062A 064A # ARABIC LIGATURE TEH WITH YEH ISOLATED FORM +FC11 >062B 062C # ARABIC LIGATURE THEH WITH JEEM ISOLATED FORM +FC12 >062B 0645 # ARABIC LIGATURE THEH WITH MEEM ISOLATED FORM +FC13 >062B 0649 # ARABIC LIGATURE THEH WITH ALEF MAKSURA ISOLATED FORM +FC14 >062B 064A # ARABIC LIGATURE THEH WITH YEH ISOLATED FORM +FC15 >062C 062D # ARABIC LIGATURE JEEM WITH HAH ISOLATED FORM +FC16 >062C 0645 # ARABIC LIGATURE JEEM WITH MEEM ISOLATED FORM +FC17 >062D 062C # ARABIC LIGATURE HAH WITH JEEM ISOLATED FORM +FC18 >062D 0645 # ARABIC LIGATURE HAH WITH MEEM ISOLATED FORM +FC19 >062E 062C # ARABIC LIGATURE KHAH WITH JEEM ISOLATED FORM +FC1A >062E 062D # ARABIC LIGATURE KHAH WITH HAH ISOLATED FORM +FC1B >062E 0645 # ARABIC LIGATURE KHAH WITH MEEM ISOLATED FORM +FC1C >0633 062C # ARABIC LIGATURE SEEN WITH JEEM ISOLATED FORM +FC1D >0633 062D # ARABIC LIGATURE SEEN WITH HAH ISOLATED FORM +FC1E >0633 062E # ARABIC LIGATURE SEEN WITH KHAH ISOLATED FORM +FC1F >0633 0645 # ARABIC LIGATURE SEEN WITH MEEM ISOLATED FORM +FC20 >0635 062D # ARABIC LIGATURE SAD WITH HAH ISOLATED FORM +FC21 >0635 0645 # ARABIC LIGATURE SAD WITH MEEM ISOLATED FORM +FC22 >0636 062C # ARABIC LIGATURE DAD WITH JEEM ISOLATED FORM +FC23 >0636 062D # ARABIC LIGATURE DAD WITH HAH ISOLATED FORM +FC24 >0636 062E # ARABIC LIGATURE DAD WITH KHAH ISOLATED FORM +FC25 >0636 0645 # ARABIC LIGATURE DAD WITH MEEM ISOLATED FORM +FC26 >0637 062D # ARABIC LIGATURE TAH WITH HAH ISOLATED FORM +FC27 >0637 0645 # ARABIC LIGATURE TAH WITH MEEM ISOLATED FORM +FC28 >0638 0645 # ARABIC LIGATURE ZAH WITH MEEM ISOLATED FORM +FC29 >0639 062C # ARABIC LIGATURE AIN WITH JEEM ISOLATED FORM +FC2A >0639 0645 # ARABIC LIGATURE AIN WITH MEEM ISOLATED FORM +FC2B >063A 062C # ARABIC LIGATURE GHAIN WITH JEEM ISOLATED FORM +FC2C >063A 0645 # ARABIC LIGATURE GHAIN WITH MEEM ISOLATED FORM +FC2D >0641 062C # ARABIC LIGATURE FEH WITH JEEM ISOLATED FORM +FC2E >0641 062D # ARABIC LIGATURE FEH WITH HAH ISOLATED FORM +FC2F >0641 062E # ARABIC LIGATURE FEH WITH KHAH ISOLATED FORM +FC30 >0641 0645 # ARABIC LIGATURE FEH WITH MEEM ISOLATED FORM +FC31 >0641 0649 # ARABIC LIGATURE FEH WITH ALEF MAKSURA ISOLATED FORM +FC32 >0641 064A # ARABIC LIGATURE FEH WITH YEH ISOLATED FORM +FC33 >0642 062D # ARABIC LIGATURE QAF WITH HAH ISOLATED FORM +FC34 >0642 0645 # ARABIC LIGATURE QAF WITH MEEM ISOLATED FORM +FC35 >0642 0649 # ARABIC LIGATURE QAF WITH ALEF MAKSURA ISOLATED FORM +FC36 >0642 064A # ARABIC LIGATURE QAF WITH YEH ISOLATED FORM +FC37 >0643 0627 # ARABIC LIGATURE KAF WITH ALEF ISOLATED FORM +FC38 >0643 062C # ARABIC LIGATURE KAF WITH JEEM ISOLATED FORM +FC39 >0643 062D # ARABIC LIGATURE KAF WITH HAH ISOLATED FORM +FC3A >0643 062E # ARABIC LIGATURE KAF WITH KHAH ISOLATED FORM +FC3B >0643 0644 # ARABIC LIGATURE KAF WITH LAM ISOLATED FORM +FC3C >0643 0645 # ARABIC LIGATURE KAF WITH MEEM ISOLATED FORM +FC3D >0643 0649 # ARABIC LIGATURE KAF WITH ALEF MAKSURA ISOLATED FORM +FC3E >0643 064A # ARABIC LIGATURE KAF WITH YEH ISOLATED FORM +FC3F >0644 062C # ARABIC LIGATURE LAM WITH JEEM ISOLATED FORM +FC40 >0644 062D # ARABIC LIGATURE LAM WITH HAH ISOLATED FORM +FC41 >0644 062E # ARABIC LIGATURE LAM WITH KHAH ISOLATED FORM +FC42 >0644 0645 # ARABIC LIGATURE LAM WITH MEEM ISOLATED FORM +FC43 >0644 0649 # ARABIC LIGATURE LAM WITH ALEF MAKSURA ISOLATED FORM +FC44 >0644 064A # ARABIC LIGATURE LAM WITH YEH ISOLATED FORM +FC45 >0645 062C # ARABIC LIGATURE MEEM WITH JEEM ISOLATED FORM +FC46 >0645 062D # ARABIC LIGATURE MEEM WITH HAH ISOLATED FORM +FC47 >0645 062E # ARABIC LIGATURE MEEM WITH KHAH ISOLATED FORM +FC48 >0645 0645 # ARABIC LIGATURE MEEM WITH MEEM ISOLATED FORM +FC49 >0645 0649 # ARABIC LIGATURE MEEM WITH ALEF MAKSURA ISOLATED FORM +FC4A >0645 064A # ARABIC LIGATURE MEEM WITH YEH ISOLATED FORM +FC4B >0646 062C # ARABIC LIGATURE NOON WITH JEEM ISOLATED FORM +FC4C >0646 062D # ARABIC LIGATURE NOON WITH HAH ISOLATED FORM +FC4D >0646 062E # ARABIC LIGATURE NOON WITH KHAH ISOLATED FORM +FC4E >0646 0645 # ARABIC LIGATURE NOON WITH MEEM ISOLATED FORM +FC4F >0646 0649 # ARABIC LIGATURE NOON WITH ALEF MAKSURA ISOLATED FORM +FC50 >0646 064A # ARABIC LIGATURE NOON WITH YEH ISOLATED FORM +FC51 >0647 062C # ARABIC LIGATURE HEH WITH JEEM ISOLATED FORM +FC52 >0647 0645 # ARABIC LIGATURE HEH WITH MEEM ISOLATED FORM +FC53 >0647 0649 # ARABIC LIGATURE HEH WITH ALEF MAKSURA ISOLATED FORM +FC54 >0647 064A # ARABIC LIGATURE HEH WITH YEH ISOLATED FORM +FC55 >064A 062C # ARABIC LIGATURE YEH WITH JEEM ISOLATED FORM +FC56 >064A 062D # ARABIC LIGATURE YEH WITH HAH ISOLATED FORM +FC57 >064A 062E # ARABIC LIGATURE YEH WITH KHAH ISOLATED FORM +FC58 >064A 0645 # ARABIC LIGATURE YEH WITH MEEM ISOLATED FORM +FC59 >064A 0649 # ARABIC LIGATURE YEH WITH ALEF MAKSURA ISOLATED FORM +FC5A >064A 064A # ARABIC LIGATURE YEH WITH YEH ISOLATED FORM +FC5B >0630 0670 # ARABIC LIGATURE THAL WITH SUPERSCRIPT ALEF ISOLATED FORM +FC5C >0631 0670 # ARABIC LIGATURE REH WITH SUPERSCRIPT ALEF ISOLATED FORM +FC5D >0649 0670 # ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF ISOLATED FORM +FC5E..FC63 >FFFD # ARABIC LIGATURE SHADDA WITH DAMMATAN ISOLATED FORM..ARABIC LIGATURE SHADDA WITH SUPERSCRIPT ALEF ISOLATED FORM +FC64 >0626 0631 # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH REH FINAL FORM +FC65 >0626 0632 # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ZAIN FINAL FORM +FC66 >0626 0645 # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM FINAL FORM +FC67 >0626 0646 # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH NOON FINAL FORM +FC68 >0626 0649 # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM +FC69 >0626 064A # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH FINAL FORM +FC6A >0628 0631 # ARABIC LIGATURE BEH WITH REH FINAL FORM +FC6B >0628 0632 # ARABIC LIGATURE BEH WITH ZAIN FINAL FORM +FC6C >0628 0645 # ARABIC LIGATURE BEH WITH MEEM FINAL FORM +FC6D >0628 0646 # ARABIC LIGATURE BEH WITH NOON FINAL FORM +FC6E >0628 0649 # ARABIC LIGATURE BEH WITH ALEF MAKSURA FINAL FORM +FC6F >0628 064A # ARABIC LIGATURE BEH WITH YEH FINAL FORM +FC70 >062A 0631 # ARABIC LIGATURE TEH WITH REH FINAL FORM +FC71 >062A 0632 # ARABIC LIGATURE TEH WITH ZAIN FINAL FORM +FC72 >062A 0645 # ARABIC LIGATURE TEH WITH MEEM FINAL FORM +FC73 >062A 0646 # ARABIC LIGATURE TEH WITH NOON FINAL FORM +FC74 >062A 0649 # ARABIC LIGATURE TEH WITH ALEF MAKSURA FINAL FORM +FC75 >062A 064A # ARABIC LIGATURE TEH WITH YEH FINAL FORM +FC76 >062B 0631 # ARABIC LIGATURE THEH WITH REH FINAL FORM +FC77 >062B 0632 # ARABIC LIGATURE THEH WITH ZAIN FINAL FORM +FC78 >062B 0645 # ARABIC LIGATURE THEH WITH MEEM FINAL FORM +FC79 >062B 0646 # ARABIC LIGATURE THEH WITH NOON FINAL FORM +FC7A >062B 0649 # ARABIC LIGATURE THEH WITH ALEF MAKSURA FINAL FORM +FC7B >062B 064A # ARABIC LIGATURE THEH WITH YEH FINAL FORM +FC7C >0641 0649 # ARABIC LIGATURE FEH WITH ALEF MAKSURA FINAL FORM +FC7D >0641 064A # ARABIC LIGATURE FEH WITH YEH FINAL FORM +FC7E >0642 0649 # ARABIC LIGATURE QAF WITH ALEF MAKSURA FINAL FORM +FC7F >0642 064A # ARABIC LIGATURE QAF WITH YEH FINAL FORM +FC80 >0643 0627 # ARABIC LIGATURE KAF WITH ALEF FINAL FORM +FC81 >0643 0644 # ARABIC LIGATURE KAF WITH LAM FINAL FORM +FC82 >0643 0645 # ARABIC LIGATURE KAF WITH MEEM FINAL FORM +FC83 >0643 0649 # ARABIC LIGATURE KAF WITH ALEF MAKSURA FINAL FORM +FC84 >0643 064A # ARABIC LIGATURE KAF WITH YEH FINAL FORM +FC85 >0644 0645 # ARABIC LIGATURE LAM WITH MEEM FINAL FORM +FC86 >0644 0649 # ARABIC LIGATURE LAM WITH ALEF MAKSURA FINAL FORM +FC87 >0644 064A # ARABIC LIGATURE LAM WITH YEH FINAL FORM +FC88 >0645 0627 # ARABIC LIGATURE MEEM WITH ALEF FINAL FORM +FC89 >0645 0645 # ARABIC LIGATURE MEEM WITH MEEM FINAL FORM +FC8A >0646 0631 # ARABIC LIGATURE NOON WITH REH FINAL FORM +FC8B >0646 0632 # ARABIC LIGATURE NOON WITH ZAIN FINAL FORM +FC8C >0646 0645 # ARABIC LIGATURE NOON WITH MEEM FINAL FORM +FC8D >0646 0646 # ARABIC LIGATURE NOON WITH NOON FINAL FORM +FC8E >0646 0649 # ARABIC LIGATURE NOON WITH ALEF MAKSURA FINAL FORM +FC8F >0646 064A # ARABIC LIGATURE NOON WITH YEH FINAL FORM +FC90 >0649 0670 # ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF FINAL FORM +FC91 >064A 0631 # ARABIC LIGATURE YEH WITH REH FINAL FORM +FC92 >064A 0632 # ARABIC LIGATURE YEH WITH ZAIN FINAL FORM +FC93 >064A 0645 # ARABIC LIGATURE YEH WITH MEEM FINAL FORM +FC94 >064A 0646 # ARABIC LIGATURE YEH WITH NOON FINAL FORM +FC95 >064A 0649 # ARABIC LIGATURE YEH WITH ALEF MAKSURA FINAL FORM +FC96 >064A 064A # ARABIC LIGATURE YEH WITH YEH FINAL FORM +FC97 >0626 062C # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM INITIAL FORM +FC98 >0626 062D # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH INITIAL FORM +FC99 >0626 062E # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH KHAH INITIAL FORM +FC9A >0626 0645 # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM INITIAL FORM +FC9B >0626 0647 # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH INITIAL FORM +FC9C >0628 062C # ARABIC LIGATURE BEH WITH JEEM INITIAL FORM +FC9D >0628 062D # ARABIC LIGATURE BEH WITH HAH INITIAL FORM +FC9E >0628 062E # ARABIC LIGATURE BEH WITH KHAH INITIAL FORM +FC9F >0628 0645 # ARABIC LIGATURE BEH WITH MEEM INITIAL FORM +FCA0 >0628 0647 # ARABIC LIGATURE BEH WITH HEH INITIAL FORM +FCA1 >062A 062C # ARABIC LIGATURE TEH WITH JEEM INITIAL FORM +FCA2 >062A 062D # ARABIC LIGATURE TEH WITH HAH INITIAL FORM +FCA3 >062A 062E # ARABIC LIGATURE TEH WITH KHAH INITIAL FORM +FCA4 >062A 0645 # ARABIC LIGATURE TEH WITH MEEM INITIAL FORM +FCA5 >062A 0647 # ARABIC LIGATURE TEH WITH HEH INITIAL FORM +FCA6 >062B 0645 # ARABIC LIGATURE THEH WITH MEEM INITIAL FORM +FCA7 >062C 062D # ARABIC LIGATURE JEEM WITH HAH INITIAL FORM +FCA8 >062C 0645 # ARABIC LIGATURE JEEM WITH MEEM INITIAL FORM +FCA9 >062D 062C # ARABIC LIGATURE HAH WITH JEEM INITIAL FORM +FCAA >062D 0645 # ARABIC LIGATURE HAH WITH MEEM INITIAL FORM +FCAB >062E 062C # ARABIC LIGATURE KHAH WITH JEEM INITIAL FORM +FCAC >062E 0645 # ARABIC LIGATURE KHAH WITH MEEM INITIAL FORM +FCAD >0633 062C # ARABIC LIGATURE SEEN WITH JEEM INITIAL FORM +FCAE >0633 062D # ARABIC LIGATURE SEEN WITH HAH INITIAL FORM +FCAF >0633 062E # ARABIC LIGATURE SEEN WITH KHAH INITIAL FORM +FCB0 >0633 0645 # ARABIC LIGATURE SEEN WITH MEEM INITIAL FORM +FCB1 >0635 062D # ARABIC LIGATURE SAD WITH HAH INITIAL FORM +FCB2 >0635 062E # ARABIC LIGATURE SAD WITH KHAH INITIAL FORM +FCB3 >0635 0645 # ARABIC LIGATURE SAD WITH MEEM INITIAL FORM +FCB4 >0636 062C # ARABIC LIGATURE DAD WITH JEEM INITIAL FORM +FCB5 >0636 062D # ARABIC LIGATURE DAD WITH HAH INITIAL FORM +FCB6 >0636 062E # ARABIC LIGATURE DAD WITH KHAH INITIAL FORM +FCB7 >0636 0645 # ARABIC LIGATURE DAD WITH MEEM INITIAL FORM +FCB8 >0637 062D # ARABIC LIGATURE TAH WITH HAH INITIAL FORM +FCB9 >0638 0645 # ARABIC LIGATURE ZAH WITH MEEM INITIAL FORM +FCBA >0639 062C # ARABIC LIGATURE AIN WITH JEEM INITIAL FORM +FCBB >0639 0645 # ARABIC LIGATURE AIN WITH MEEM INITIAL FORM +FCBC >063A 062C # ARABIC LIGATURE GHAIN WITH JEEM INITIAL FORM +FCBD >063A 0645 # ARABIC LIGATURE GHAIN WITH MEEM INITIAL FORM +FCBE >0641 062C # ARABIC LIGATURE FEH WITH JEEM INITIAL FORM +FCBF >0641 062D # ARABIC LIGATURE FEH WITH HAH INITIAL FORM +FCC0 >0641 062E # ARABIC LIGATURE FEH WITH KHAH INITIAL FORM +FCC1 >0641 0645 # ARABIC LIGATURE FEH WITH MEEM INITIAL FORM +FCC2 >0642 062D # ARABIC LIGATURE QAF WITH HAH INITIAL FORM +FCC3 >0642 0645 # ARABIC LIGATURE QAF WITH MEEM INITIAL FORM +FCC4 >0643 062C # ARABIC LIGATURE KAF WITH JEEM INITIAL FORM +FCC5 >0643 062D # ARABIC LIGATURE KAF WITH HAH INITIAL FORM +FCC6 >0643 062E # ARABIC LIGATURE KAF WITH KHAH INITIAL FORM +FCC7 >0643 0644 # ARABIC LIGATURE KAF WITH LAM INITIAL FORM +FCC8 >0643 0645 # ARABIC LIGATURE KAF WITH MEEM INITIAL FORM +FCC9 >0644 062C # ARABIC LIGATURE LAM WITH JEEM INITIAL FORM +FCCA >0644 062D # ARABIC LIGATURE LAM WITH HAH INITIAL FORM +FCCB >0644 062E # ARABIC LIGATURE LAM WITH KHAH INITIAL FORM +FCCC >0644 0645 # ARABIC LIGATURE LAM WITH MEEM INITIAL FORM +FCCD >0644 0647 # ARABIC LIGATURE LAM WITH HEH INITIAL FORM +FCCE >0645 062C # ARABIC LIGATURE MEEM WITH JEEM INITIAL FORM +FCCF >0645 062D # ARABIC LIGATURE MEEM WITH HAH INITIAL FORM +FCD0 >0645 062E # ARABIC LIGATURE MEEM WITH KHAH INITIAL FORM +FCD1 >0645 0645 # ARABIC LIGATURE MEEM WITH MEEM INITIAL FORM +FCD2 >0646 062C # ARABIC LIGATURE NOON WITH JEEM INITIAL FORM +FCD3 >0646 062D # ARABIC LIGATURE NOON WITH HAH INITIAL FORM +FCD4 >0646 062E # ARABIC LIGATURE NOON WITH KHAH INITIAL FORM +FCD5 >0646 0645 # ARABIC LIGATURE NOON WITH MEEM INITIAL FORM +FCD6 >0646 0647 # ARABIC LIGATURE NOON WITH HEH INITIAL FORM +FCD7 >0647 062C # ARABIC LIGATURE HEH WITH JEEM INITIAL FORM +FCD8 >0647 0645 # ARABIC LIGATURE HEH WITH MEEM INITIAL FORM +FCD9 >0647 0670 # ARABIC LIGATURE HEH WITH SUPERSCRIPT ALEF INITIAL FORM +FCDA >064A 062C # ARABIC LIGATURE YEH WITH JEEM INITIAL FORM +FCDB >064A 062D # ARABIC LIGATURE YEH WITH HAH INITIAL FORM +FCDC >064A 062E # ARABIC LIGATURE YEH WITH KHAH INITIAL FORM +FCDD >064A 0645 # ARABIC LIGATURE YEH WITH MEEM INITIAL FORM +FCDE >064A 0647 # ARABIC LIGATURE YEH WITH HEH INITIAL FORM +FCDF >0626 0645 # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM MEDIAL FORM +FCE0 >0626 0647 # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH MEDIAL FORM +FCE1 >0628 0645 # ARABIC LIGATURE BEH WITH MEEM MEDIAL FORM +FCE2 >0628 0647 # ARABIC LIGATURE BEH WITH HEH MEDIAL FORM +FCE3 >062A 0645 # ARABIC LIGATURE TEH WITH MEEM MEDIAL FORM +FCE4 >062A 0647 # ARABIC LIGATURE TEH WITH HEH MEDIAL FORM +FCE5 >062B 0645 # ARABIC LIGATURE THEH WITH MEEM MEDIAL FORM +FCE6 >062B 0647 # ARABIC LIGATURE THEH WITH HEH MEDIAL FORM +FCE7 >0633 0645 # ARABIC LIGATURE SEEN WITH MEEM MEDIAL FORM +FCE8 >0633 0647 # ARABIC LIGATURE SEEN WITH HEH MEDIAL FORM +FCE9 >0634 0645 # ARABIC LIGATURE SHEEN WITH MEEM MEDIAL FORM +FCEA >0634 0647 # ARABIC LIGATURE SHEEN WITH HEH MEDIAL FORM +FCEB >0643 0644 # ARABIC LIGATURE KAF WITH LAM MEDIAL FORM +FCEC >0643 0645 # ARABIC LIGATURE KAF WITH MEEM MEDIAL FORM +FCED >0644 0645 # ARABIC LIGATURE LAM WITH MEEM MEDIAL FORM +FCEE >0646 0645 # ARABIC LIGATURE NOON WITH MEEM MEDIAL FORM +FCEF >0646 0647 # ARABIC LIGATURE NOON WITH HEH MEDIAL FORM +FCF0 >064A 0645 # ARABIC LIGATURE YEH WITH MEEM MEDIAL FORM +FCF1 >064A 0647 # ARABIC LIGATURE YEH WITH HEH MEDIAL FORM +FCF2 >0640 064E 0651 # ARABIC LIGATURE SHADDA WITH FATHA MEDIAL FORM +FCF3 >0640 064F 0651 # ARABIC LIGATURE SHADDA WITH DAMMA MEDIAL FORM +FCF4 >0640 0650 0651 # ARABIC LIGATURE SHADDA WITH KASRA MEDIAL FORM +FCF5 >0637 0649 # ARABIC LIGATURE TAH WITH ALEF MAKSURA ISOLATED FORM +FCF6 >0637 064A # ARABIC LIGATURE TAH WITH YEH ISOLATED FORM +FCF7 >0639 0649 # ARABIC LIGATURE AIN WITH ALEF MAKSURA ISOLATED FORM +FCF8 >0639 064A # ARABIC LIGATURE AIN WITH YEH ISOLATED FORM +FCF9 >063A 0649 # ARABIC LIGATURE GHAIN WITH ALEF MAKSURA ISOLATED FORM +FCFA >063A 064A # ARABIC LIGATURE GHAIN WITH YEH ISOLATED FORM +FCFB >0633 0649 # ARABIC LIGATURE SEEN WITH ALEF MAKSURA ISOLATED FORM +FCFC >0633 064A # ARABIC LIGATURE SEEN WITH YEH ISOLATED FORM +FCFD >0634 0649 # ARABIC LIGATURE SHEEN WITH ALEF MAKSURA ISOLATED FORM +FCFE >0634 064A # ARABIC LIGATURE SHEEN WITH YEH ISOLATED FORM +FCFF >062D 0649 # ARABIC LIGATURE HAH WITH ALEF MAKSURA ISOLATED FORM +FD00 >062D 064A # ARABIC LIGATURE HAH WITH YEH ISOLATED FORM +FD01 >062C 0649 # ARABIC LIGATURE JEEM WITH ALEF MAKSURA ISOLATED FORM +FD02 >062C 064A # ARABIC LIGATURE JEEM WITH YEH ISOLATED FORM +FD03 >062E 0649 # ARABIC LIGATURE KHAH WITH ALEF MAKSURA ISOLATED FORM +FD04 >062E 064A # ARABIC LIGATURE KHAH WITH YEH ISOLATED FORM +FD05 >0635 0649 # ARABIC LIGATURE SAD WITH ALEF MAKSURA ISOLATED FORM +FD06 >0635 064A # ARABIC LIGATURE SAD WITH YEH ISOLATED FORM +FD07 >0636 0649 # ARABIC LIGATURE DAD WITH ALEF MAKSURA ISOLATED FORM +FD08 >0636 064A # ARABIC LIGATURE DAD WITH YEH ISOLATED FORM +FD09 >0634 062C # ARABIC LIGATURE SHEEN WITH JEEM ISOLATED FORM +FD0A >0634 062D # ARABIC LIGATURE SHEEN WITH HAH ISOLATED FORM +FD0B >0634 062E # ARABIC LIGATURE SHEEN WITH KHAH ISOLATED FORM +FD0C >0634 0645 # ARABIC LIGATURE SHEEN WITH MEEM ISOLATED FORM +FD0D >0634 0631 # ARABIC LIGATURE SHEEN WITH REH ISOLATED FORM +FD0E >0633 0631 # ARABIC LIGATURE SEEN WITH REH ISOLATED FORM +FD0F >0635 0631 # ARABIC LIGATURE SAD WITH REH ISOLATED FORM +FD10 >0636 0631 # ARABIC LIGATURE DAD WITH REH ISOLATED FORM +FD11 >0637 0649 # ARABIC LIGATURE TAH WITH ALEF MAKSURA FINAL FORM +FD12 >0637 064A # ARABIC LIGATURE TAH WITH YEH FINAL FORM +FD13 >0639 0649 # ARABIC LIGATURE AIN WITH ALEF MAKSURA FINAL FORM +FD14 >0639 064A # ARABIC LIGATURE AIN WITH YEH FINAL FORM +FD15 >063A 0649 # ARABIC LIGATURE GHAIN WITH ALEF MAKSURA FINAL FORM +FD16 >063A 064A # ARABIC LIGATURE GHAIN WITH YEH FINAL FORM +FD17 >0633 0649 # ARABIC LIGATURE SEEN WITH ALEF MAKSURA FINAL FORM +FD18 >0633 064A # ARABIC LIGATURE SEEN WITH YEH FINAL FORM +FD19 >0634 0649 # ARABIC LIGATURE SHEEN WITH ALEF MAKSURA FINAL FORM +FD1A >0634 064A # ARABIC LIGATURE SHEEN WITH YEH FINAL FORM +FD1B >062D 0649 # ARABIC LIGATURE HAH WITH ALEF MAKSURA FINAL FORM +FD1C >062D 064A # ARABIC LIGATURE HAH WITH YEH FINAL FORM +FD1D >062C 0649 # ARABIC LIGATURE JEEM WITH ALEF MAKSURA FINAL FORM +FD1E >062C 064A # ARABIC LIGATURE JEEM WITH YEH FINAL FORM +FD1F >062E 0649 # ARABIC LIGATURE KHAH WITH ALEF MAKSURA FINAL FORM +FD20 >062E 064A # ARABIC LIGATURE KHAH WITH YEH FINAL FORM +FD21 >0635 0649 # ARABIC LIGATURE SAD WITH ALEF MAKSURA FINAL FORM +FD22 >0635 064A # ARABIC LIGATURE SAD WITH YEH FINAL FORM +FD23 >0636 0649 # ARABIC LIGATURE DAD WITH ALEF MAKSURA FINAL FORM +FD24 >0636 064A # ARABIC LIGATURE DAD WITH YEH FINAL FORM +FD25 >0634 062C # ARABIC LIGATURE SHEEN WITH JEEM FINAL FORM +FD26 >0634 062D # ARABIC LIGATURE SHEEN WITH HAH FINAL FORM +FD27 >0634 062E # ARABIC LIGATURE SHEEN WITH KHAH FINAL FORM +FD28 >0634 0645 # ARABIC LIGATURE SHEEN WITH MEEM FINAL FORM +FD29 >0634 0631 # ARABIC LIGATURE SHEEN WITH REH FINAL FORM +FD2A >0633 0631 # ARABIC LIGATURE SEEN WITH REH FINAL FORM +FD2B >0635 0631 # ARABIC LIGATURE SAD WITH REH FINAL FORM +FD2C >0636 0631 # ARABIC LIGATURE DAD WITH REH FINAL FORM +FD2D >0634 062C # ARABIC LIGATURE SHEEN WITH JEEM INITIAL FORM +FD2E >0634 062D # ARABIC LIGATURE SHEEN WITH HAH INITIAL FORM +FD2F >0634 062E # ARABIC LIGATURE SHEEN WITH KHAH INITIAL FORM +FD30 >0634 0645 # ARABIC LIGATURE SHEEN WITH MEEM INITIAL FORM +FD31 >0633 0647 # ARABIC LIGATURE SEEN WITH HEH INITIAL FORM +FD32 >0634 0647 # ARABIC LIGATURE SHEEN WITH HEH INITIAL FORM +FD33 >0637 0645 # ARABIC LIGATURE TAH WITH MEEM INITIAL FORM +FD34 >0633 062C # ARABIC LIGATURE SEEN WITH JEEM MEDIAL FORM +FD35 >0633 062D # ARABIC LIGATURE SEEN WITH HAH MEDIAL FORM +FD36 >0633 062E # ARABIC LIGATURE SEEN WITH KHAH MEDIAL FORM +FD37 >0634 062C # ARABIC LIGATURE SHEEN WITH JEEM MEDIAL FORM +FD38 >0634 062D # ARABIC LIGATURE SHEEN WITH HAH MEDIAL FORM +FD39 >0634 062E # ARABIC LIGATURE SHEEN WITH KHAH MEDIAL FORM +FD3A >0637 0645 # ARABIC LIGATURE TAH WITH MEEM MEDIAL FORM +FD3B >0638 0645 # ARABIC LIGATURE ZAH WITH MEEM MEDIAL FORM +FD3C..FD3D >0627 064B # ARABIC LIGATURE ALEF WITH FATHATAN FINAL FORM..ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM +# FD3E..FD3F valid # ORNATE LEFT PARENTHESIS..ORNATE RIGHT PARENTHESIS +FD40..FD4F >FFFD # .. +FD50 >062A 062C 0645 # ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM +FD51..FD52 >062A 062D 062C # ARABIC LIGATURE TEH WITH HAH WITH JEEM FINAL FORM..ARABIC LIGATURE TEH WITH HAH WITH JEEM INITIAL FORM +FD53 >062A 062D 0645 # ARABIC LIGATURE TEH WITH HAH WITH MEEM INITIAL FORM +FD54 >062A 062E 0645 # ARABIC LIGATURE TEH WITH KHAH WITH MEEM INITIAL FORM +FD55 >062A 0645 062C # ARABIC LIGATURE TEH WITH MEEM WITH JEEM INITIAL FORM +FD56 >062A 0645 062D # ARABIC LIGATURE TEH WITH MEEM WITH HAH INITIAL FORM +FD57 >062A 0645 062E # ARABIC LIGATURE TEH WITH MEEM WITH KHAH INITIAL FORM +FD58..FD59 >062C 0645 062D # ARABIC LIGATURE JEEM WITH MEEM WITH HAH FINAL FORM..ARABIC LIGATURE JEEM WITH MEEM WITH HAH INITIAL FORM +FD5A >062D 0645 064A # ARABIC LIGATURE HAH WITH MEEM WITH YEH FINAL FORM +FD5B >062D 0645 0649 # ARABIC LIGATURE HAH WITH MEEM WITH ALEF MAKSURA FINAL FORM +FD5C >0633 062D 062C # ARABIC LIGATURE SEEN WITH HAH WITH JEEM INITIAL FORM +FD5D >0633 062C 062D # ARABIC LIGATURE SEEN WITH JEEM WITH HAH INITIAL FORM +FD5E >0633 062C 0649 # ARABIC LIGATURE SEEN WITH JEEM WITH ALEF MAKSURA FINAL FORM +FD5F..FD60 >0633 0645 062D # ARABIC LIGATURE SEEN WITH MEEM WITH HAH FINAL FORM..ARABIC LIGATURE SEEN WITH MEEM WITH HAH INITIAL FORM +FD61 >0633 0645 062C # ARABIC LIGATURE SEEN WITH MEEM WITH JEEM INITIAL FORM +FD62..FD63 >0633 0645 0645 # ARABIC LIGATURE SEEN WITH MEEM WITH MEEM FINAL FORM..ARABIC LIGATURE SEEN WITH MEEM WITH MEEM INITIAL FORM +FD64..FD65 >0635 062D 062D # ARABIC LIGATURE SAD WITH HAH WITH HAH FINAL FORM..ARABIC LIGATURE SAD WITH HAH WITH HAH INITIAL FORM +FD66 >0635 0645 0645 # ARABIC LIGATURE SAD WITH MEEM WITH MEEM FINAL FORM +FD67..FD68 >0634 062D 0645 # ARABIC LIGATURE SHEEN WITH HAH WITH MEEM FINAL FORM..ARABIC LIGATURE SHEEN WITH HAH WITH MEEM INITIAL FORM +FD69 >0634 062C 064A # ARABIC LIGATURE SHEEN WITH JEEM WITH YEH FINAL FORM +FD6A..FD6B >0634 0645 062E # ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH FINAL FORM..ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH INITIAL FORM +FD6C..FD6D >0634 0645 0645 # ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM FINAL FORM..ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM INITIAL FORM +FD6E >0636 062D 0649 # ARABIC LIGATURE DAD WITH HAH WITH ALEF MAKSURA FINAL FORM +FD6F..FD70 >0636 062E 0645 # ARABIC LIGATURE DAD WITH KHAH WITH MEEM FINAL FORM..ARABIC LIGATURE DAD WITH KHAH WITH MEEM INITIAL FORM +FD71..FD72 >0637 0645 062D # ARABIC LIGATURE TAH WITH MEEM WITH HAH FINAL FORM..ARABIC LIGATURE TAH WITH MEEM WITH HAH INITIAL FORM +FD73 >0637 0645 0645 # ARABIC LIGATURE TAH WITH MEEM WITH MEEM INITIAL FORM +FD74 >0637 0645 064A # ARABIC LIGATURE TAH WITH MEEM WITH YEH FINAL FORM +FD75 >0639 062C 0645 # ARABIC LIGATURE AIN WITH JEEM WITH MEEM FINAL FORM +FD76..FD77 >0639 0645 0645 # ARABIC LIGATURE AIN WITH MEEM WITH MEEM FINAL FORM..ARABIC LIGATURE AIN WITH MEEM WITH MEEM INITIAL FORM +FD78 >0639 0645 0649 # ARABIC LIGATURE AIN WITH MEEM WITH ALEF MAKSURA FINAL FORM +FD79 >063A 0645 0645 # ARABIC LIGATURE GHAIN WITH MEEM WITH MEEM FINAL FORM +FD7A >063A 0645 064A # ARABIC LIGATURE GHAIN WITH MEEM WITH YEH FINAL FORM +FD7B >063A 0645 0649 # ARABIC LIGATURE GHAIN WITH MEEM WITH ALEF MAKSURA FINAL FORM +FD7C..FD7D >0641 062E 0645 # ARABIC LIGATURE FEH WITH KHAH WITH MEEM FINAL FORM..ARABIC LIGATURE FEH WITH KHAH WITH MEEM INITIAL FORM +FD7E >0642 0645 062D # ARABIC LIGATURE QAF WITH MEEM WITH HAH FINAL FORM +FD7F >0642 0645 0645 # ARABIC LIGATURE QAF WITH MEEM WITH MEEM FINAL FORM +FD80 >0644 062D 0645 # ARABIC LIGATURE LAM WITH HAH WITH MEEM FINAL FORM +FD81 >0644 062D 064A # ARABIC LIGATURE LAM WITH HAH WITH YEH FINAL FORM +FD82 >0644 062D 0649 # ARABIC LIGATURE LAM WITH HAH WITH ALEF MAKSURA FINAL FORM +FD83..FD84 >0644 062C 062C # ARABIC LIGATURE LAM WITH JEEM WITH JEEM INITIAL FORM..ARABIC LIGATURE LAM WITH JEEM WITH JEEM FINAL FORM +FD85..FD86 >0644 062E 0645 # ARABIC LIGATURE LAM WITH KHAH WITH MEEM FINAL FORM..ARABIC LIGATURE LAM WITH KHAH WITH MEEM INITIAL FORM +FD87..FD88 >0644 0645 062D # ARABIC LIGATURE LAM WITH MEEM WITH HAH FINAL FORM..ARABIC LIGATURE LAM WITH MEEM WITH HAH INITIAL FORM +FD89 >0645 062D 062C # ARABIC LIGATURE MEEM WITH HAH WITH JEEM INITIAL FORM +FD8A >0645 062D 0645 # ARABIC LIGATURE MEEM WITH HAH WITH MEEM INITIAL FORM +FD8B >0645 062D 064A # ARABIC LIGATURE MEEM WITH HAH WITH YEH FINAL FORM +FD8C >0645 062C 062D # ARABIC LIGATURE MEEM WITH JEEM WITH HAH INITIAL FORM +FD8D >0645 062C 0645 # ARABIC LIGATURE MEEM WITH JEEM WITH MEEM INITIAL FORM +FD8E >0645 062E 062C # ARABIC LIGATURE MEEM WITH KHAH WITH JEEM INITIAL FORM +FD8F >0645 062E 0645 # ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM +FD90..FD91 >FFFD # .. +FD92 >0645 062C 062E # ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM +FD93 >0647 0645 062C # ARABIC LIGATURE HEH WITH MEEM WITH JEEM INITIAL FORM +FD94 >0647 0645 0645 # ARABIC LIGATURE HEH WITH MEEM WITH MEEM INITIAL FORM +FD95 >0646 062D 0645 # ARABIC LIGATURE NOON WITH HAH WITH MEEM INITIAL FORM +FD96 >0646 062D 0649 # ARABIC LIGATURE NOON WITH HAH WITH ALEF MAKSURA FINAL FORM +FD97..FD98 >0646 062C 0645 # ARABIC LIGATURE NOON WITH JEEM WITH MEEM FINAL FORM..ARABIC LIGATURE NOON WITH JEEM WITH MEEM INITIAL FORM +FD99 >0646 062C 0649 # ARABIC LIGATURE NOON WITH JEEM WITH ALEF MAKSURA FINAL FORM +FD9A >0646 0645 064A # ARABIC LIGATURE NOON WITH MEEM WITH YEH FINAL FORM +FD9B >0646 0645 0649 # ARABIC LIGATURE NOON WITH MEEM WITH ALEF MAKSURA FINAL FORM +FD9C..FD9D >064A 0645 0645 # ARABIC LIGATURE YEH WITH MEEM WITH MEEM FINAL FORM..ARABIC LIGATURE YEH WITH MEEM WITH MEEM INITIAL FORM +FD9E >0628 062E 064A # ARABIC LIGATURE BEH WITH KHAH WITH YEH FINAL FORM +FD9F >062A 062C 064A # ARABIC LIGATURE TEH WITH JEEM WITH YEH FINAL FORM +FDA0 >062A 062C 0649 # ARABIC LIGATURE TEH WITH JEEM WITH ALEF MAKSURA FINAL FORM +FDA1 >062A 062E 064A # ARABIC LIGATURE TEH WITH KHAH WITH YEH FINAL FORM +FDA2 >062A 062E 0649 # ARABIC LIGATURE TEH WITH KHAH WITH ALEF MAKSURA FINAL FORM +FDA3 >062A 0645 064A # ARABIC LIGATURE TEH WITH MEEM WITH YEH FINAL FORM +FDA4 >062A 0645 0649 # ARABIC LIGATURE TEH WITH MEEM WITH ALEF MAKSURA FINAL FORM +FDA5 >062C 0645 064A # ARABIC LIGATURE JEEM WITH MEEM WITH YEH FINAL FORM +FDA6 >062C 062D 0649 # ARABIC LIGATURE JEEM WITH HAH WITH ALEF MAKSURA FINAL FORM +FDA7 >062C 0645 0649 # ARABIC LIGATURE JEEM WITH MEEM WITH ALEF MAKSURA FINAL FORM +FDA8 >0633 062E 0649 # ARABIC LIGATURE SEEN WITH KHAH WITH ALEF MAKSURA FINAL FORM +FDA9 >0635 062D 064A # ARABIC LIGATURE SAD WITH HAH WITH YEH FINAL FORM +FDAA >0634 062D 064A # ARABIC LIGATURE SHEEN WITH HAH WITH YEH FINAL FORM +FDAB >0636 062D 064A # ARABIC LIGATURE DAD WITH HAH WITH YEH FINAL FORM +FDAC >0644 062C 064A # ARABIC LIGATURE LAM WITH JEEM WITH YEH FINAL FORM +FDAD >0644 0645 064A # ARABIC LIGATURE LAM WITH MEEM WITH YEH FINAL FORM +FDAE >064A 062D 064A # ARABIC LIGATURE YEH WITH HAH WITH YEH FINAL FORM +FDAF >064A 062C 064A # ARABIC LIGATURE YEH WITH JEEM WITH YEH FINAL FORM +FDB0 >064A 0645 064A # ARABIC LIGATURE YEH WITH MEEM WITH YEH FINAL FORM +FDB1 >0645 0645 064A # ARABIC LIGATURE MEEM WITH MEEM WITH YEH FINAL FORM +FDB2 >0642 0645 064A # ARABIC LIGATURE QAF WITH MEEM WITH YEH FINAL FORM +FDB3 >0646 062D 064A # ARABIC LIGATURE NOON WITH HAH WITH YEH FINAL FORM +FDB4 >0642 0645 062D # ARABIC LIGATURE QAF WITH MEEM WITH HAH INITIAL FORM +FDB5 >0644 062D 0645 # ARABIC LIGATURE LAM WITH HAH WITH MEEM INITIAL FORM +FDB6 >0639 0645 064A # ARABIC LIGATURE AIN WITH MEEM WITH YEH FINAL FORM +FDB7 >0643 0645 064A # ARABIC LIGATURE KAF WITH MEEM WITH YEH FINAL FORM +FDB8 >0646 062C 062D # ARABIC LIGATURE NOON WITH JEEM WITH HAH INITIAL FORM +FDB9 >0645 062E 064A # ARABIC LIGATURE MEEM WITH KHAH WITH YEH FINAL FORM +FDBA >0644 062C 0645 # ARABIC LIGATURE LAM WITH JEEM WITH MEEM INITIAL FORM +FDBB >0643 0645 0645 # ARABIC LIGATURE KAF WITH MEEM WITH MEEM FINAL FORM +FDBC >0644 062C 0645 # ARABIC LIGATURE LAM WITH JEEM WITH MEEM FINAL FORM +FDBD >0646 062C 062D # ARABIC LIGATURE NOON WITH JEEM WITH HAH FINAL FORM +FDBE >062C 062D 064A # ARABIC LIGATURE JEEM WITH HAH WITH YEH FINAL FORM +FDBF >062D 062C 064A # ARABIC LIGATURE HAH WITH JEEM WITH YEH FINAL FORM +FDC0 >0645 062C 064A # ARABIC LIGATURE MEEM WITH JEEM WITH YEH FINAL FORM +FDC1 >0641 0645 064A # ARABIC LIGATURE FEH WITH MEEM WITH YEH FINAL FORM +FDC2 >0628 062D 064A # ARABIC LIGATURE BEH WITH HAH WITH YEH FINAL FORM +FDC3 >0643 0645 0645 # ARABIC LIGATURE KAF WITH MEEM WITH MEEM INITIAL FORM +FDC4 >0639 062C 0645 # ARABIC LIGATURE AIN WITH JEEM WITH MEEM INITIAL FORM +FDC5 >0635 0645 0645 # ARABIC LIGATURE SAD WITH MEEM WITH MEEM INITIAL FORM +FDC6 >0633 062E 064A # ARABIC LIGATURE SEEN WITH KHAH WITH YEH FINAL FORM +FDC7 >0646 062C 064A # ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM +FDC8..FDEF >FFFD # .. +FDF0 >0635 0644 06D2 # ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM +FDF1 >0642 0644 06D2 # ARABIC LIGATURE QALA USED AS KORANIC STOP SIGN ISOLATED FORM +FDF2 >0627 0644 0644 0647 # ARABIC LIGATURE ALLAH ISOLATED FORM +FDF3 >0627 0643 0628 0631 # ARABIC LIGATURE AKBAR ISOLATED FORM +FDF4 >0645 062D 0645 062F # ARABIC LIGATURE MOHAMMAD ISOLATED FORM +FDF5 >0635 0644 0639 0645 # ARABIC LIGATURE SALAM ISOLATED FORM +FDF6 >0631 0633 0648 0644 # ARABIC LIGATURE RASOUL ISOLATED FORM +FDF7 >0639 0644 064A 0647 # ARABIC LIGATURE ALAYHE ISOLATED FORM +FDF8 >0648 0633 0644 0645 # ARABIC LIGATURE WASALLAM ISOLATED FORM +FDF9 >0635 0644 0649 # ARABIC LIGATURE SALLA ISOLATED FORM +FDFA..FDFB >FFFD # ARABIC LIGATURE SALLALLAHOU ALAYHE WASALLAM..ARABIC LIGATURE JALLAJALALOUHOU +FDFC >0631 06CC 0627 0644 # RIAL SIGN +# FDFD valid # ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM +FDFE..FDFF >FFFD # .. +FE00..FE0F > # VARIATION SELECTOR-1..VARIATION SELECTOR-16 +FE10 >FFFD # PRESENTATION FORM FOR VERTICAL COMMA +FE11 >3001 # PRESENTATION FORM FOR VERTICAL IDEOGRAPHIC COMMA +FE12..FE16 >FFFD # PRESENTATION FORM FOR VERTICAL IDEOGRAPHIC FULL STOP..PRESENTATION FORM FOR VERTICAL QUESTION MARK +FE17 >3016 # PRESENTATION FORM FOR VERTICAL LEFT WHITE LENTICULAR BRACKET +FE18 >3017 # PRESENTATION FORM FOR VERTICAL RIGHT WHITE LENTICULAR BRAKCET +FE19 >FFFD # PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS +FE1A..FE1F >FFFD # .. +# FE20..FE26 valid # COMBINING LIGATURE LEFT HALF..COMBINING CONJOINING MACRON +FE27..FE2F >FFFD # .. +FE30 >FFFD # PRESENTATION FORM FOR VERTICAL TWO DOT LEADER +FE31 >2014 # PRESENTATION FORM FOR VERTICAL EM DASH +FE32 >2013 # PRESENTATION FORM FOR VERTICAL EN DASH +FE33..FE38 >FFFD # PRESENTATION FORM FOR VERTICAL LOW LINE..PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET +FE39 >3014 # PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET +FE3A >3015 # PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET +FE3B >3010 # PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET +FE3C >3011 # PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET +FE3D >300A # PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET +FE3E >300B # PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET +FE3F >3008 # PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET +FE40 >3009 # PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET +FE41 >300C # PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET +FE42 >300D # PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET +FE43 >300E # PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET +FE44 >300F # PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET +# FE45..FE46 valid # SESAME DOT..WHITE SESAME DOT +FE47..FE50 >FFFD # PRESENTATION FORM FOR VERTICAL LEFT SQUARE BRACKET..SMALL COMMA +FE51 >3001 # SMALL IDEOGRAPHIC COMMA +FE52 >FFFD # SMALL FULL STOP +FE53 >FFFD # +FE54..FE57 >FFFD # SMALL SEMICOLON..SMALL EXCLAMATION MARK +FE58 >2014 # SMALL EM DASH +FE59..FE5C >FFFD # SMALL LEFT PARENTHESIS..SMALL RIGHT CURLY BRACKET +FE5D >3014 # SMALL LEFT TORTOISE SHELL BRACKET +FE5E >3015 # SMALL RIGHT TORTOISE SHELL BRACKET +FE5F..FE62 >FFFD # SMALL NUMBER SIGN..SMALL PLUS SIGN +FE63 >002D # SMALL HYPHEN-MINUS +FE64..FE66 >FFFD # SMALL LESS-THAN SIGN..SMALL EQUALS SIGN +FE67 >FFFD # +FE68..FE6B >FFFD # SMALL REVERSE SOLIDUS..SMALL COMMERCIAL AT +FE6C..FE6F >FFFD # .. +FE70 >FFFD # ARABIC FATHATAN ISOLATED FORM +FE71 >0640 064B # ARABIC TATWEEL WITH FATHATAN ABOVE +FE72 >FFFD # ARABIC DAMMATAN ISOLATED FORM +# FE73 valid # ARABIC TAIL FRAGMENT +FE74 >FFFD # ARABIC KASRATAN ISOLATED FORM +FE75 >FFFD # +FE76 >FFFD # ARABIC FATHA ISOLATED FORM +FE77 >0640 064E # ARABIC FATHA MEDIAL FORM +FE78 >FFFD # ARABIC DAMMA ISOLATED FORM +FE79 >0640 064F # ARABIC DAMMA MEDIAL FORM +FE7A >FFFD # ARABIC KASRA ISOLATED FORM +FE7B >0640 0650 # ARABIC KASRA MEDIAL FORM +FE7C >FFFD # ARABIC SHADDA ISOLATED FORM +FE7D >0640 0651 # ARABIC SHADDA MEDIAL FORM +FE7E >FFFD # ARABIC SUKUN ISOLATED FORM +FE7F >0640 0652 # ARABIC SUKUN MEDIAL FORM +FE80 >0621 # ARABIC LETTER HAMZA ISOLATED FORM +FE81..FE82 >0622 # ARABIC LETTER ALEF WITH MADDA ABOVE ISOLATED FORM..ARABIC LETTER ALEF WITH MADDA ABOVE FINAL FORM +FE83..FE84 >0623 # ARABIC LETTER ALEF WITH HAMZA ABOVE ISOLATED FORM..ARABIC LETTER ALEF WITH HAMZA ABOVE FINAL FORM +FE85..FE86 >0624 # ARABIC LETTER WAW WITH HAMZA ABOVE ISOLATED FORM..ARABIC LETTER WAW WITH HAMZA ABOVE FINAL FORM +FE87..FE88 >0625 # ARABIC LETTER ALEF WITH HAMZA BELOW ISOLATED FORM..ARABIC LETTER ALEF WITH HAMZA BELOW FINAL FORM +FE89..FE8C >0626 # ARABIC LETTER YEH WITH HAMZA ABOVE ISOLATED FORM..ARABIC LETTER YEH WITH HAMZA ABOVE MEDIAL FORM +FE8D..FE8E >0627 # ARABIC LETTER ALEF ISOLATED FORM..ARABIC LETTER ALEF FINAL FORM +FE8F..FE92 >0628 # ARABIC LETTER BEH ISOLATED FORM..ARABIC LETTER BEH MEDIAL FORM +FE93..FE94 >0629 # ARABIC LETTER TEH MARBUTA ISOLATED FORM..ARABIC LETTER TEH MARBUTA FINAL FORM +FE95..FE98 >062A # ARABIC LETTER TEH ISOLATED FORM..ARABIC LETTER TEH MEDIAL FORM +FE99..FE9C >062B # ARABIC LETTER THEH ISOLATED FORM..ARABIC LETTER THEH MEDIAL FORM +FE9D..FEA0 >062C # ARABIC LETTER JEEM ISOLATED FORM..ARABIC LETTER JEEM MEDIAL FORM +FEA1..FEA4 >062D # ARABIC LETTER HAH ISOLATED FORM..ARABIC LETTER HAH MEDIAL FORM +FEA5..FEA8 >062E # ARABIC LETTER KHAH ISOLATED FORM..ARABIC LETTER KHAH MEDIAL FORM +FEA9..FEAA >062F # ARABIC LETTER DAL ISOLATED FORM..ARABIC LETTER DAL FINAL FORM +FEAB..FEAC >0630 # ARABIC LETTER THAL ISOLATED FORM..ARABIC LETTER THAL FINAL FORM +FEAD..FEAE >0631 # ARABIC LETTER REH ISOLATED FORM..ARABIC LETTER REH FINAL FORM +FEAF..FEB0 >0632 # ARABIC LETTER ZAIN ISOLATED FORM..ARABIC LETTER ZAIN FINAL FORM +FEB1..FEB4 >0633 # ARABIC LETTER SEEN ISOLATED FORM..ARABIC LETTER SEEN MEDIAL FORM +FEB5..FEB8 >0634 # ARABIC LETTER SHEEN ISOLATED FORM..ARABIC LETTER SHEEN MEDIAL FORM +FEB9..FEBC >0635 # ARABIC LETTER SAD ISOLATED FORM..ARABIC LETTER SAD MEDIAL FORM +FEBD..FEC0 >0636 # ARABIC LETTER DAD ISOLATED FORM..ARABIC LETTER DAD MEDIAL FORM +FEC1..FEC4 >0637 # ARABIC LETTER TAH ISOLATED FORM..ARABIC LETTER TAH MEDIAL FORM +FEC5..FEC8 >0638 # ARABIC LETTER ZAH ISOLATED FORM..ARABIC LETTER ZAH MEDIAL FORM +FEC9..FECC >0639 # ARABIC LETTER AIN ISOLATED FORM..ARABIC LETTER AIN MEDIAL FORM +FECD..FED0 >063A # ARABIC LETTER GHAIN ISOLATED FORM..ARABIC LETTER GHAIN MEDIAL FORM +FED1..FED4 >0641 # ARABIC LETTER FEH ISOLATED FORM..ARABIC LETTER FEH MEDIAL FORM +FED5..FED8 >0642 # ARABIC LETTER QAF ISOLATED FORM..ARABIC LETTER QAF MEDIAL FORM +FED9..FEDC >0643 # ARABIC LETTER KAF ISOLATED FORM..ARABIC LETTER KAF MEDIAL FORM +FEDD..FEE0 >0644 # ARABIC LETTER LAM ISOLATED FORM..ARABIC LETTER LAM MEDIAL FORM +FEE1..FEE4 >0645 # ARABIC LETTER MEEM ISOLATED FORM..ARABIC LETTER MEEM MEDIAL FORM +FEE5..FEE8 >0646 # ARABIC LETTER NOON ISOLATED FORM..ARABIC LETTER NOON MEDIAL FORM +FEE9..FEEC >0647 # ARABIC LETTER HEH ISOLATED FORM..ARABIC LETTER HEH MEDIAL FORM +FEED..FEEE >0648 # ARABIC LETTER WAW ISOLATED FORM..ARABIC LETTER WAW FINAL FORM +FEEF..FEF0 >0649 # ARABIC LETTER ALEF MAKSURA ISOLATED FORM..ARABIC LETTER ALEF MAKSURA FINAL FORM +FEF1..FEF4 >064A # ARABIC LETTER YEH ISOLATED FORM..ARABIC LETTER YEH MEDIAL FORM +FEF5..FEF6 >0644 0622 # ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM..ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE FINAL FORM +FEF7..FEF8 >0644 0623 # ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM..ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE FINAL FORM +FEF9..FEFA >0644 0625 # ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW ISOLATED FORM..ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW FINAL FORM +FEFB..FEFC >0644 0627 # ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM..ARABIC LIGATURE LAM WITH ALEF FINAL FORM +FEFD..FEFE >FFFD # .. +FEFF > # ZERO WIDTH NO-BREAK SPACE +FF00 >FFFD # +FF01..FF0C >FFFD # FULLWIDTH EXCLAMATION MARK..FULLWIDTH COMMA +FF0D >002D # FULLWIDTH HYPHEN-MINUS +FF0E >002E # FULLWIDTH FULL STOP +FF0F >FFFD # FULLWIDTH SOLIDUS +FF10 >0030 # FULLWIDTH DIGIT ZERO +FF11 >0031 # FULLWIDTH DIGIT ONE +FF12 >0032 # FULLWIDTH DIGIT TWO +FF13 >0033 # FULLWIDTH DIGIT THREE +FF14 >0034 # FULLWIDTH DIGIT FOUR +FF15 >0035 # FULLWIDTH DIGIT FIVE +FF16 >0036 # FULLWIDTH DIGIT SIX +FF17 >0037 # FULLWIDTH DIGIT SEVEN +FF18 >0038 # FULLWIDTH DIGIT EIGHT +FF19 >0039 # FULLWIDTH DIGIT NINE +FF1A..FF20 >FFFD # FULLWIDTH COLON..FULLWIDTH COMMERCIAL AT +FF21 >0061 # FULLWIDTH LATIN CAPITAL LETTER A +FF22 >0062 # FULLWIDTH LATIN CAPITAL LETTER B +FF23 >0063 # FULLWIDTH LATIN CAPITAL LETTER C +FF24 >0064 # FULLWIDTH LATIN CAPITAL LETTER D +FF25 >0065 # FULLWIDTH LATIN CAPITAL LETTER E +FF26 >0066 # FULLWIDTH LATIN CAPITAL LETTER F +FF27 >0067 # FULLWIDTH LATIN CAPITAL LETTER G +FF28 >0068 # FULLWIDTH LATIN CAPITAL LETTER H +FF29 >0069 # FULLWIDTH LATIN CAPITAL LETTER I +FF2A >006A # FULLWIDTH LATIN CAPITAL LETTER J +FF2B >006B # FULLWIDTH LATIN CAPITAL LETTER K +FF2C >006C # FULLWIDTH LATIN CAPITAL LETTER L +FF2D >006D # FULLWIDTH LATIN CAPITAL LETTER M +FF2E >006E # FULLWIDTH LATIN CAPITAL LETTER N +FF2F >006F # FULLWIDTH LATIN CAPITAL LETTER O +FF30 >0070 # FULLWIDTH LATIN CAPITAL LETTER P +FF31 >0071 # FULLWIDTH LATIN CAPITAL LETTER Q +FF32 >0072 # FULLWIDTH LATIN CAPITAL LETTER R +FF33 >0073 # FULLWIDTH LATIN CAPITAL LETTER S +FF34 >0074 # FULLWIDTH LATIN CAPITAL LETTER T +FF35 >0075 # FULLWIDTH LATIN CAPITAL LETTER U +FF36 >0076 # FULLWIDTH LATIN CAPITAL LETTER V +FF37 >0077 # FULLWIDTH LATIN CAPITAL LETTER W +FF38 >0078 # FULLWIDTH LATIN CAPITAL LETTER X +FF39 >0079 # FULLWIDTH LATIN CAPITAL LETTER Y +FF3A >007A # FULLWIDTH LATIN CAPITAL LETTER Z +FF3B..FF40 >FFFD # FULLWIDTH LEFT SQUARE BRACKET..FULLWIDTH GRAVE ACCENT +FF41 >0061 # FULLWIDTH LATIN SMALL LETTER A +FF42 >0062 # FULLWIDTH LATIN SMALL LETTER B +FF43 >0063 # FULLWIDTH LATIN SMALL LETTER C +FF44 >0064 # FULLWIDTH LATIN SMALL LETTER D +FF45 >0065 # FULLWIDTH LATIN SMALL LETTER E +FF46 >0066 # FULLWIDTH LATIN SMALL LETTER F +FF47 >0067 # FULLWIDTH LATIN SMALL LETTER G +FF48 >0068 # FULLWIDTH LATIN SMALL LETTER H +FF49 >0069 # FULLWIDTH LATIN SMALL LETTER I +FF4A >006A # FULLWIDTH LATIN SMALL LETTER J +FF4B >006B # FULLWIDTH LATIN SMALL LETTER K +FF4C >006C # FULLWIDTH LATIN SMALL LETTER L +FF4D >006D # FULLWIDTH LATIN SMALL LETTER M +FF4E >006E # FULLWIDTH LATIN SMALL LETTER N +FF4F >006F # FULLWIDTH LATIN SMALL LETTER O +FF50 >0070 # FULLWIDTH LATIN SMALL LETTER P +FF51 >0071 # FULLWIDTH LATIN SMALL LETTER Q +FF52 >0072 # FULLWIDTH LATIN SMALL LETTER R +FF53 >0073 # FULLWIDTH LATIN SMALL LETTER S +FF54 >0074 # FULLWIDTH LATIN SMALL LETTER T +FF55 >0075 # FULLWIDTH LATIN SMALL LETTER U +FF56 >0076 # FULLWIDTH LATIN SMALL LETTER V +FF57 >0077 # FULLWIDTH LATIN SMALL LETTER W +FF58 >0078 # FULLWIDTH LATIN SMALL LETTER X +FF59 >0079 # FULLWIDTH LATIN SMALL LETTER Y +FF5A >007A # FULLWIDTH LATIN SMALL LETTER Z +FF5B..FF5E >FFFD # FULLWIDTH LEFT CURLY BRACKET..FULLWIDTH TILDE +FF5F >2985 # FULLWIDTH LEFT WHITE PARENTHESIS +FF60 >2986 # FULLWIDTH RIGHT WHITE PARENTHESIS +FF61 >002E # HALFWIDTH IDEOGRAPHIC FULL STOP +FF62 >300C # HALFWIDTH LEFT CORNER BRACKET +FF63 >300D # HALFWIDTH RIGHT CORNER BRACKET +FF64 >3001 # HALFWIDTH IDEOGRAPHIC COMMA +FF65 >30FB # HALFWIDTH KATAKANA MIDDLE DOT +FF66 >30F2 # HALFWIDTH KATAKANA LETTER WO +FF67 >30A1 # HALFWIDTH KATAKANA LETTER SMALL A +FF68 >30A3 # HALFWIDTH KATAKANA LETTER SMALL I +FF69 >30A5 # HALFWIDTH KATAKANA LETTER SMALL U +FF6A >30A7 # HALFWIDTH KATAKANA LETTER SMALL E +FF6B >30A9 # HALFWIDTH KATAKANA LETTER SMALL O +FF6C >30E3 # HALFWIDTH KATAKANA LETTER SMALL YA +FF6D >30E5 # HALFWIDTH KATAKANA LETTER SMALL YU +FF6E >30E7 # HALFWIDTH KATAKANA LETTER SMALL YO +FF6F >30C3 # HALFWIDTH KATAKANA LETTER SMALL TU +FF70 >30FC # HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK +FF71 >30A2 # HALFWIDTH KATAKANA LETTER A +FF72 >30A4 # HALFWIDTH KATAKANA LETTER I +FF73 >30A6 # HALFWIDTH KATAKANA LETTER U +FF74 >30A8 # HALFWIDTH KATAKANA LETTER E +FF75 >30AA # HALFWIDTH KATAKANA LETTER O +FF76 >30AB # HALFWIDTH KATAKANA LETTER KA +FF77 >30AD # HALFWIDTH KATAKANA LETTER KI +FF78 >30AF # HALFWIDTH KATAKANA LETTER KU +FF79 >30B1 # HALFWIDTH KATAKANA LETTER KE +FF7A >30B3 # HALFWIDTH KATAKANA LETTER KO +FF7B >30B5 # HALFWIDTH KATAKANA LETTER SA +FF7C >30B7 # HALFWIDTH KATAKANA LETTER SI +FF7D >30B9 # HALFWIDTH KATAKANA LETTER SU +FF7E >30BB # HALFWIDTH KATAKANA LETTER SE +FF7F >30BD # HALFWIDTH KATAKANA LETTER SO +FF80 >30BF # HALFWIDTH KATAKANA LETTER TA +FF81 >30C1 # HALFWIDTH KATAKANA LETTER TI +FF82 >30C4 # HALFWIDTH KATAKANA LETTER TU +FF83 >30C6 # HALFWIDTH KATAKANA LETTER TE +FF84 >30C8 # HALFWIDTH KATAKANA LETTER TO +FF85 >30CA # HALFWIDTH KATAKANA LETTER NA +FF86 >30CB # HALFWIDTH KATAKANA LETTER NI +FF87 >30CC # HALFWIDTH KATAKANA LETTER NU +FF88 >30CD # HALFWIDTH KATAKANA LETTER NE +FF89 >30CE # HALFWIDTH KATAKANA LETTER NO +FF8A >30CF # HALFWIDTH KATAKANA LETTER HA +FF8B >30D2 # HALFWIDTH KATAKANA LETTER HI +FF8C >30D5 # HALFWIDTH KATAKANA LETTER HU +FF8D >30D8 # HALFWIDTH KATAKANA LETTER HE +FF8E >30DB # HALFWIDTH KATAKANA LETTER HO +FF8F >30DE # HALFWIDTH KATAKANA LETTER MA +FF90 >30DF # HALFWIDTH KATAKANA LETTER MI +FF91 >30E0 # HALFWIDTH KATAKANA LETTER MU +FF92 >30E1 # HALFWIDTH KATAKANA LETTER ME +FF93 >30E2 # HALFWIDTH KATAKANA LETTER MO +FF94 >30E4 # HALFWIDTH KATAKANA LETTER YA +FF95 >30E6 # HALFWIDTH KATAKANA LETTER YU +FF96 >30E8 # HALFWIDTH KATAKANA LETTER YO +FF97 >30E9 # HALFWIDTH KATAKANA LETTER RA +FF98 >30EA # HALFWIDTH KATAKANA LETTER RI +FF99 >30EB # HALFWIDTH KATAKANA LETTER RU +FF9A >30EC # HALFWIDTH KATAKANA LETTER RE +FF9B >30ED # HALFWIDTH KATAKANA LETTER RO +FF9C >30EF # HALFWIDTH KATAKANA LETTER WA +FF9D >30F3 # HALFWIDTH KATAKANA LETTER N +FF9E >3099 # HALFWIDTH KATAKANA VOICED SOUND MARK +FF9F >309A # HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK +FFA0 >FFFD # HALFWIDTH HANGUL FILLER +FFA1 >1100 # HALFWIDTH HANGUL LETTER KIYEOK +FFA2 >1101 # HALFWIDTH HANGUL LETTER SSANGKIYEOK +FFA3 >11AA # HALFWIDTH HANGUL LETTER KIYEOK-SIOS +FFA4 >1102 # HALFWIDTH HANGUL LETTER NIEUN +FFA5 >11AC # HALFWIDTH HANGUL LETTER NIEUN-CIEUC +FFA6 >11AD # HALFWIDTH HANGUL LETTER NIEUN-HIEUH +FFA7 >1103 # HALFWIDTH HANGUL LETTER TIKEUT +FFA8 >1104 # HALFWIDTH HANGUL LETTER SSANGTIKEUT +FFA9 >1105 # HALFWIDTH HANGUL LETTER RIEUL +FFAA >11B0 # HALFWIDTH HANGUL LETTER RIEUL-KIYEOK +FFAB >11B1 # HALFWIDTH HANGUL LETTER RIEUL-MIEUM +FFAC >11B2 # HALFWIDTH HANGUL LETTER RIEUL-PIEUP +FFAD >11B3 # HALFWIDTH HANGUL LETTER RIEUL-SIOS +FFAE >11B4 # HALFWIDTH HANGUL LETTER RIEUL-THIEUTH +FFAF >11B5 # HALFWIDTH HANGUL LETTER RIEUL-PHIEUPH +FFB0 >111A # HALFWIDTH HANGUL LETTER RIEUL-HIEUH +FFB1 >1106 # HALFWIDTH HANGUL LETTER MIEUM +FFB2 >1107 # HALFWIDTH HANGUL LETTER PIEUP +FFB3 >1108 # HALFWIDTH HANGUL LETTER SSANGPIEUP +FFB4 >1121 # HALFWIDTH HANGUL LETTER PIEUP-SIOS +FFB5 >1109 # HALFWIDTH HANGUL LETTER SIOS +FFB6 >110A # HALFWIDTH HANGUL LETTER SSANGSIOS +FFB7 >110B # HALFWIDTH HANGUL LETTER IEUNG +FFB8 >110C # HALFWIDTH HANGUL LETTER CIEUC +FFB9 >110D # HALFWIDTH HANGUL LETTER SSANGCIEUC +FFBA >110E # HALFWIDTH HANGUL LETTER CHIEUCH +FFBB >110F # HALFWIDTH HANGUL LETTER KHIEUKH +FFBC >1110 # HALFWIDTH HANGUL LETTER THIEUTH +FFBD >1111 # HALFWIDTH HANGUL LETTER PHIEUPH +FFBE >1112 # HALFWIDTH HANGUL LETTER HIEUH +FFBF..FFC1 >FFFD # .. +FFC2 >1161 # HALFWIDTH HANGUL LETTER A +FFC3 >1162 # HALFWIDTH HANGUL LETTER AE +FFC4 >1163 # HALFWIDTH HANGUL LETTER YA +FFC5 >1164 # HALFWIDTH HANGUL LETTER YAE +FFC6 >1165 # HALFWIDTH HANGUL LETTER EO +FFC7 >1166 # HALFWIDTH HANGUL LETTER E +FFC8..FFC9 >FFFD # .. +FFCA >1167 # HALFWIDTH HANGUL LETTER YEO +FFCB >1168 # HALFWIDTH HANGUL LETTER YE +FFCC >1169 # HALFWIDTH HANGUL LETTER O +FFCD >116A # HALFWIDTH HANGUL LETTER WA +FFCE >116B # HALFWIDTH HANGUL LETTER WAE +FFCF >116C # HALFWIDTH HANGUL LETTER OE +FFD0..FFD1 >FFFD # .. +FFD2 >116D # HALFWIDTH HANGUL LETTER YO +FFD3 >116E # HALFWIDTH HANGUL LETTER U +FFD4 >116F # HALFWIDTH HANGUL LETTER WEO +FFD5 >1170 # HALFWIDTH HANGUL LETTER WE +FFD6 >1171 # HALFWIDTH HANGUL LETTER WI +FFD7 >1172 # HALFWIDTH HANGUL LETTER YU +FFD8..FFD9 >FFFD # .. +FFDA >1173 # HALFWIDTH HANGUL LETTER EU +FFDB >1174 # HALFWIDTH HANGUL LETTER YI +FFDC >1175 # HALFWIDTH HANGUL LETTER I +FFDD..FFDF >FFFD # .. +FFE0 >00A2 # FULLWIDTH CENT SIGN +FFE1 >00A3 # FULLWIDTH POUND SIGN +FFE2 >00AC # FULLWIDTH NOT SIGN +FFE3 >FFFD # FULLWIDTH MACRON +FFE4 >00A6 # FULLWIDTH BROKEN BAR +FFE5 >00A5 # FULLWIDTH YEN SIGN +FFE6 >20A9 # FULLWIDTH WON SIGN +FFE7 >FFFD # +FFE8 >2502 # HALFWIDTH FORMS LIGHT VERTICAL +FFE9 >2190 # HALFWIDTH LEFTWARDS ARROW +FFEA >2191 # HALFWIDTH UPWARDS ARROW +FFEB >2192 # HALFWIDTH RIGHTWARDS ARROW +FFEC >2193 # HALFWIDTH DOWNWARDS ARROW +FFED >25A0 # HALFWIDTH BLACK SQUARE +FFEE >25CB # HALFWIDTH WHITE CIRCLE +FFEF..FFF8 >FFFD # .. +FFF9..FFFC >FFFD # INTERLINEAR ANNOTATION ANCHOR..REPLACEMENT CHARACTER +FFFE..FFFF >FFFD # .. +# 10000..1000Bvalid # LINEAR B SYLLABLE B008 A..LINEAR B SYLLABLE B046 JE +1000C >FFFD # +# 1000D..10026valid # LINEAR B SYLLABLE B036 JO..LINEAR B SYLLABLE B032 QO +10027 >FFFD # +# 10028..1003Avalid # LINEAR B SYLLABLE B060 RA..LINEAR B SYLLABLE B042 WO +1003B >FFFD # +# 1003C..1003Dvalid # LINEAR B SYLLABLE B017 ZA..LINEAR B SYLLABLE B074 ZE +1003E >FFFD # +# 1003F..1004Dvalid # LINEAR B SYLLABLE B020 ZO..LINEAR B SYLLABLE B091 TWO +1004E..1004F >FFFD # .. +# 10050..1005Dvalid # LINEAR B SYMBOL B018..LINEAR B SYMBOL B089 +1005E..1007F >FFFD # .. +# 10080..100FAvalid # LINEAR B IDEOGRAM B100 MAN..LINEAR B IDEOGRAM VESSEL B305 +100FB..100FF >FFFD # .. +# 10100..10102valid # AEGEAN WORD SEPARATOR LINE..AEGEAN CHECK MARK +10103..10106 >FFFD # .. +# 10107..10133valid # AEGEAN NUMBER ONE..AEGEAN NUMBER NINETY THOUSAND +10134..10136 >FFFD # .. +# 10137..1018Avalid # AEGEAN WEIGHT BASE UNIT..GREEK ZERO SIGN +1018B..1018F >FFFD # .. +# 10190..1019Bvalid # ROMAN SEXTANS SIGN..ROMAN CENTURIAL SIGN +1019C..101CF >FFFD # .. +# 101D0..101FDvalid # PHAISTOS DISC SIGN PEDESTRIAN..PHAISTOS DISC SIGN COMBINING OBLIQUE STROKE +101FE..1027F >FFFD # .. +# 10280..1029Cvalid # LYCIAN LETTER A..LYCIAN LETTER X +1029D..1029F >FFFD # .. +# 102A0..102D0valid # CARIAN LETTER A..CARIAN LETTER UUU3 +102D1..102FF >FFFD # .. +# 10300..1031Evalid # OLD ITALIC LETTER A..OLD ITALIC LETTER UU +1031F >FFFD # +# 10320..10323valid # OLD ITALIC NUMERAL ONE..OLD ITALIC NUMERAL FIFTY +10324..1032F >FFFD # .. +# 10330..1034Avalid # GOTHIC LETTER AHSA..GOTHIC LETTER NINE HUNDRED +1034B..1037F >FFFD # .. +# 10380..1039Dvalid # UGARITIC LETTER ALPA..UGARITIC LETTER SSU +1039E >FFFD # +# 1039F..103C3valid # UGARITIC WORD DIVIDER..OLD PERSIAN SIGN HA +103C4..103C7 >FFFD # .. +# 103C8..103D5valid # OLD PERSIAN SIGN AURAMAZDAA..OLD PERSIAN NUMBER HUNDRED +103D6..103FF >FFFD # .. +10400 >10428 # DESERET CAPITAL LETTER LONG I +10401 >10429 # DESERET CAPITAL LETTER LONG E +10402 >1042A # DESERET CAPITAL LETTER LONG A +10403 >1042B # DESERET CAPITAL LETTER LONG AH +10404 >1042C # DESERET CAPITAL LETTER LONG O +10405 >1042D # DESERET CAPITAL LETTER LONG OO +10406 >1042E # DESERET CAPITAL LETTER SHORT I +10407 >1042F # DESERET CAPITAL LETTER SHORT E +10408 >10430 # DESERET CAPITAL LETTER SHORT A +10409 >10431 # DESERET CAPITAL LETTER SHORT AH +1040A >10432 # DESERET CAPITAL LETTER SHORT O +1040B >10433 # DESERET CAPITAL LETTER SHORT OO +1040C >10434 # DESERET CAPITAL LETTER AY +1040D >10435 # DESERET CAPITAL LETTER OW +1040E >10436 # DESERET CAPITAL LETTER WU +1040F >10437 # DESERET CAPITAL LETTER YEE +10410 >10438 # DESERET CAPITAL LETTER H +10411 >10439 # DESERET CAPITAL LETTER PEE +10412 >1043A # DESERET CAPITAL LETTER BEE +10413 >1043B # DESERET CAPITAL LETTER TEE +10414 >1043C # DESERET CAPITAL LETTER DEE +10415 >1043D # DESERET CAPITAL LETTER CHEE +10416 >1043E # DESERET CAPITAL LETTER JEE +10417 >1043F # DESERET CAPITAL LETTER KAY +10418 >10440 # DESERET CAPITAL LETTER GAY +10419 >10441 # DESERET CAPITAL LETTER EF +1041A >10442 # DESERET CAPITAL LETTER VEE +1041B >10443 # DESERET CAPITAL LETTER ETH +1041C >10444 # DESERET CAPITAL LETTER THEE +1041D >10445 # DESERET CAPITAL LETTER ES +1041E >10446 # DESERET CAPITAL LETTER ZEE +1041F >10447 # DESERET CAPITAL LETTER ESH +10420 >10448 # DESERET CAPITAL LETTER ZHEE +10421 >10449 # DESERET CAPITAL LETTER ER +10422 >1044A # DESERET CAPITAL LETTER EL +10423 >1044B # DESERET CAPITAL LETTER EM +10424 >1044C # DESERET CAPITAL LETTER EN +10425 >1044D # DESERET CAPITAL LETTER ENG +10426 >1044E # DESERET CAPITAL LETTER OI +10427 >1044F # DESERET CAPITAL LETTER EW +# 10428..1049Dvalid # DESERET SMALL LETTER LONG I..OSMANYA LETTER OO +1049E..1049F >FFFD # .. +# 104A0..104A9valid # OSMANYA DIGIT ZERO..OSMANYA DIGIT NINE +104AA..107FF >FFFD # .. +# 10800..10805valid # CYPRIOT SYLLABLE A..CYPRIOT SYLLABLE JA +10806..10807 >FFFD # .. +# 10808 valid # CYPRIOT SYLLABLE JO +10809 >FFFD # +# 1080A..10835valid # CYPRIOT SYLLABLE KA..CYPRIOT SYLLABLE WO +10836 >FFFD # +# 10837..10838valid # CYPRIOT SYLLABLE XA..CYPRIOT SYLLABLE XE +10839..1083B >FFFD # .. +# 1083C valid # CYPRIOT SYLLABLE ZA +1083D..1083E >FFFD # .. +# 1083F..10855valid # CYPRIOT SYLLABLE ZO..IMPERIAL ARAMAIC LETTER TAW +10856 >FFFD # +# 10857..1085Fvalid # IMPERIAL ARAMAIC SECTION SIGN..IMPERIAL ARAMAIC NUMBER TEN THOUSAND +10860..108FF >FFFD # .. +# 10900..1091Bvalid # PHOENICIAN LETTER ALF..PHOENICIAN NUMBER THREE +1091C..1091E >FFFD # .. +# 1091F..10939valid # PHOENICIAN WORD SEPARATOR..LYDIAN LETTER C +1093A..1093E >FFFD # .. +# 1093F valid # LYDIAN TRIANGULAR MARK +10940..109FF >FFFD # .. +# 10A00..10A03valid # KHAROSHTHI LETTER A..KHAROSHTHI VOWEL SIGN VOCALIC R +10A04 >FFFD # +# 10A05..10A06valid # KHAROSHTHI VOWEL SIGN E..KHAROSHTHI VOWEL SIGN O +10A07..10A0B >FFFD # .. +# 10A0C..10A13valid # KHAROSHTHI VOWEL LENGTH MARK..KHAROSHTHI LETTER GHA +10A14 >FFFD # +# 10A15..10A17valid # KHAROSHTHI LETTER CA..KHAROSHTHI LETTER JA +10A18 >FFFD # +# 10A19..10A33valid # KHAROSHTHI LETTER NYA..KHAROSHTHI LETTER TTTHA +10A34..10A37 >FFFD # .. +# 10A38..10A3Avalid # KHAROSHTHI SIGN BAR ABOVE..KHAROSHTHI SIGN DOT BELOW +10A3B..10A3E >FFFD # .. +# 10A3F..10A47valid # KHAROSHTHI VIRAMA..KHAROSHTHI NUMBER ONE THOUSAND +10A48..10A4F >FFFD # .. +# 10A50..10A58valid # KHAROSHTHI PUNCTUATION DOT..KHAROSHTHI PUNCTUATION LINES +10A59..10A5F >FFFD # .. +# 10A60..10A7Fvalid # OLD SOUTH ARABIAN LETTER HE..OLD SOUTH ARABIAN NUMERIC INDICATOR +10A80..10AFF >FFFD # .. +# 10B00..10B35valid # AVESTAN LETTER A..AVESTAN LETTER HE +10B36..10B38 >FFFD # .. +# 10B39..10B55valid # AVESTAN ABBREVIATION MARK..INSCRIPTIONAL PARTHIAN LETTER TAW +10B56..10B57 >FFFD # .. +# 10B58..10B72valid # INSCRIPTIONAL PARTHIAN NUMBER ONE..INSCRIPTIONAL PAHLAVI LETTER TAW +10B73..10B77 >FFFD # .. +# 10B78..10B7Fvalid # INSCRIPTIONAL PAHLAVI NUMBER ONE..INSCRIPTIONAL PAHLAVI NUMBER ONE THOUSAND +10B80..10BFF >FFFD # .. +# 10C00..10C48valid # OLD TURKIC LETTER ORKHON A..OLD TURKIC LETTER ORKHON BASH +10C49..10E5F >FFFD # .. +# 10E60..10E7Evalid # RUMI DIGIT ONE..RUMI FRACTION TWO THIRDS +10E7F..1107F >FFFD # .. +# 11080..110BCvalid # KAITHI SIGN CANDRABINDU..KAITHI ENUMERATION SIGN +110BD >FFFD # KAITHI NUMBER SIGN +# 110BE..110C1valid # KAITHI SECTION MARK..KAITHI DOUBLE DANDA +110C2..11FFF >FFFD # .. +# 12000..1236Evalid # CUNEIFORM SIGN A..CUNEIFORM SIGN ZUM +1236F..123FF >FFFD # .. +# 12400..12462valid # CUNEIFORM NUMERIC SIGN TWO ASH..CUNEIFORM NUMERIC SIGN OLD ASSYRIAN ONE QUARTER +12463..1246F >FFFD # .. +# 12470..12473valid # CUNEIFORM PUNCTUATION SIGN OLD ASSYRIAN WORD DIVIDER..CUNEIFORM PUNCTUATION SIGN DIAGONAL TRICOLON +12474..12FFF >FFFD # .. +# 13000..1342Evalid # EGYPTIAN HIEROGLYPH A001..EGYPTIAN HIEROGLYPH AA032 +1342F..1CFFF >FFFD # .. +# 1D000..1D0F5valid # BYZANTINE MUSICAL SYMBOL PSILI..BYZANTINE MUSICAL SYMBOL GORGON NEO KATO +1D0F6..1D0FF >FFFD # .. +# 1D100..1D126valid # MUSICAL SYMBOL SINGLE BARLINE..MUSICAL SYMBOL DRUM CLEF-2 +1D127..1D128 >FFFD # .. +# 1D129..1D15Dvalid # MUSICAL SYMBOL MULTIPLE MEASURE REST..MUSICAL SYMBOL WHOLE NOTE +1D15E >1D157 1D165 # MUSICAL SYMBOL HALF NOTE +1D15F >1D158 1D165 # MUSICAL SYMBOL QUARTER NOTE +1D160 >1D158 1D165 1D16E # MUSICAL SYMBOL EIGHTH NOTE +1D161 >1D158 1D165 1D16F # MUSICAL SYMBOL SIXTEENTH NOTE +1D162 >1D158 1D165 1D170 # MUSICAL SYMBOL THIRTY-SECOND NOTE +1D163 >1D158 1D165 1D171 # MUSICAL SYMBOL SIXTY-FOURTH NOTE +1D164 >1D158 1D165 1D172 # MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE +# 1D165..1D172valid # MUSICAL SYMBOL COMBINING STEM..MUSICAL SYMBOL COMBINING FLAG-5 +1D173..1D17A >FFFD # MUSICAL SYMBOL BEGIN BEAM..MUSICAL SYMBOL END PHRASE +# 1D17B..1D1BAvalid # MUSICAL SYMBOL COMBINING ACCENT..MUSICAL SYMBOL SEMIBREVIS BLACK +1D1BB >1D1B9 1D165 # MUSICAL SYMBOL MINIMA +1D1BC >1D1BA 1D165 # MUSICAL SYMBOL MINIMA BLACK +1D1BD >1D1B9 1D165 1D16E # MUSICAL SYMBOL SEMIMINIMA WHITE +1D1BE >1D1BA 1D165 1D16E # MUSICAL SYMBOL SEMIMINIMA BLACK +1D1BF >1D1B9 1D165 1D16F # MUSICAL SYMBOL FUSA WHITE +1D1C0 >1D1BA 1D165 1D16F # MUSICAL SYMBOL FUSA BLACK +# 1D1C1..1D1DDvalid # MUSICAL SYMBOL LONGA PERFECTA REST..MUSICAL SYMBOL PES SUBPUNCTIS +1D1DE..1D1FF >FFFD # .. +# 1D200..1D245valid # GREEK VOCAL NOTATION SYMBOL-1..GREEK MUSICAL LEIMMA +1D246..1D2FF >FFFD # .. +# 1D300..1D356valid # MONOGRAM FOR EARTH..TETRAGRAM FOR FOSTERING +1D357..1D35F >FFFD # .. +# 1D360..1D371valid # COUNTING ROD UNIT DIGIT ONE..COUNTING ROD TENS DIGIT NINE +1D372..1D3FF >FFFD # .. +1D400 >0061 # MATHEMATICAL BOLD CAPITAL A +1D401 >0062 # MATHEMATICAL BOLD CAPITAL B +1D402 >0063 # MATHEMATICAL BOLD CAPITAL C +1D403 >0064 # MATHEMATICAL BOLD CAPITAL D +1D404 >0065 # MATHEMATICAL BOLD CAPITAL E +1D405 >0066 # MATHEMATICAL BOLD CAPITAL F +1D406 >0067 # MATHEMATICAL BOLD CAPITAL G +1D407 >0068 # MATHEMATICAL BOLD CAPITAL H +1D408 >0069 # MATHEMATICAL BOLD CAPITAL I +1D409 >006A # MATHEMATICAL BOLD CAPITAL J +1D40A >006B # MATHEMATICAL BOLD CAPITAL K +1D40B >006C # MATHEMATICAL BOLD CAPITAL L +1D40C >006D # MATHEMATICAL BOLD CAPITAL M +1D40D >006E # MATHEMATICAL BOLD CAPITAL N +1D40E >006F # MATHEMATICAL BOLD CAPITAL O +1D40F >0070 # MATHEMATICAL BOLD CAPITAL P +1D410 >0071 # MATHEMATICAL BOLD CAPITAL Q +1D411 >0072 # MATHEMATICAL BOLD CAPITAL R +1D412 >0073 # MATHEMATICAL BOLD CAPITAL S +1D413 >0074 # MATHEMATICAL BOLD CAPITAL T +1D414 >0075 # MATHEMATICAL BOLD CAPITAL U +1D415 >0076 # MATHEMATICAL BOLD CAPITAL V +1D416 >0077 # MATHEMATICAL BOLD CAPITAL W +1D417 >0078 # MATHEMATICAL BOLD CAPITAL X +1D418 >0079 # MATHEMATICAL BOLD CAPITAL Y +1D419 >007A # MATHEMATICAL BOLD CAPITAL Z +1D41A >0061 # MATHEMATICAL BOLD SMALL A +1D41B >0062 # MATHEMATICAL BOLD SMALL B +1D41C >0063 # MATHEMATICAL BOLD SMALL C +1D41D >0064 # MATHEMATICAL BOLD SMALL D +1D41E >0065 # MATHEMATICAL BOLD SMALL E +1D41F >0066 # MATHEMATICAL BOLD SMALL F +1D420 >0067 # MATHEMATICAL BOLD SMALL G +1D421 >0068 # MATHEMATICAL BOLD SMALL H +1D422 >0069 # MATHEMATICAL BOLD SMALL I +1D423 >006A # MATHEMATICAL BOLD SMALL J +1D424 >006B # MATHEMATICAL BOLD SMALL K +1D425 >006C # MATHEMATICAL BOLD SMALL L +1D426 >006D # MATHEMATICAL BOLD SMALL M +1D427 >006E # MATHEMATICAL BOLD SMALL N +1D428 >006F # MATHEMATICAL BOLD SMALL O +1D429 >0070 # MATHEMATICAL BOLD SMALL P +1D42A >0071 # MATHEMATICAL BOLD SMALL Q +1D42B >0072 # MATHEMATICAL BOLD SMALL R +1D42C >0073 # MATHEMATICAL BOLD SMALL S +1D42D >0074 # MATHEMATICAL BOLD SMALL T +1D42E >0075 # MATHEMATICAL BOLD SMALL U +1D42F >0076 # MATHEMATICAL BOLD SMALL V +1D430 >0077 # MATHEMATICAL BOLD SMALL W +1D431 >0078 # MATHEMATICAL BOLD SMALL X +1D432 >0079 # MATHEMATICAL BOLD SMALL Y +1D433 >007A # MATHEMATICAL BOLD SMALL Z +1D434 >0061 # MATHEMATICAL ITALIC CAPITAL A +1D435 >0062 # MATHEMATICAL ITALIC CAPITAL B +1D436 >0063 # MATHEMATICAL ITALIC CAPITAL C +1D437 >0064 # MATHEMATICAL ITALIC CAPITAL D +1D438 >0065 # MATHEMATICAL ITALIC CAPITAL E +1D439 >0066 # MATHEMATICAL ITALIC CAPITAL F +1D43A >0067 # MATHEMATICAL ITALIC CAPITAL G +1D43B >0068 # MATHEMATICAL ITALIC CAPITAL H +1D43C >0069 # MATHEMATICAL ITALIC CAPITAL I +1D43D >006A # MATHEMATICAL ITALIC CAPITAL J +1D43E >006B # MATHEMATICAL ITALIC CAPITAL K +1D43F >006C # MATHEMATICAL ITALIC CAPITAL L +1D440 >006D # MATHEMATICAL ITALIC CAPITAL M +1D441 >006E # MATHEMATICAL ITALIC CAPITAL N +1D442 >006F # MATHEMATICAL ITALIC CAPITAL O +1D443 >0070 # MATHEMATICAL ITALIC CAPITAL P +1D444 >0071 # MATHEMATICAL ITALIC CAPITAL Q +1D445 >0072 # MATHEMATICAL ITALIC CAPITAL R +1D446 >0073 # MATHEMATICAL ITALIC CAPITAL S +1D447 >0074 # MATHEMATICAL ITALIC CAPITAL T +1D448 >0075 # MATHEMATICAL ITALIC CAPITAL U +1D449 >0076 # MATHEMATICAL ITALIC CAPITAL V +1D44A >0077 # MATHEMATICAL ITALIC CAPITAL W +1D44B >0078 # MATHEMATICAL ITALIC CAPITAL X +1D44C >0079 # MATHEMATICAL ITALIC CAPITAL Y +1D44D >007A # MATHEMATICAL ITALIC CAPITAL Z +1D44E >0061 # MATHEMATICAL ITALIC SMALL A +1D44F >0062 # MATHEMATICAL ITALIC SMALL B +1D450 >0063 # MATHEMATICAL ITALIC SMALL C +1D451 >0064 # MATHEMATICAL ITALIC SMALL D +1D452 >0065 # MATHEMATICAL ITALIC SMALL E +1D453 >0066 # MATHEMATICAL ITALIC SMALL F +1D454 >0067 # MATHEMATICAL ITALIC SMALL G +1D455 >FFFD # +1D456 >0069 # MATHEMATICAL ITALIC SMALL I +1D457 >006A # MATHEMATICAL ITALIC SMALL J +1D458 >006B # MATHEMATICAL ITALIC SMALL K +1D459 >006C # MATHEMATICAL ITALIC SMALL L +1D45A >006D # MATHEMATICAL ITALIC SMALL M +1D45B >006E # MATHEMATICAL ITALIC SMALL N +1D45C >006F # MATHEMATICAL ITALIC SMALL O +1D45D >0070 # MATHEMATICAL ITALIC SMALL P +1D45E >0071 # MATHEMATICAL ITALIC SMALL Q +1D45F >0072 # MATHEMATICAL ITALIC SMALL R +1D460 >0073 # MATHEMATICAL ITALIC SMALL S +1D461 >0074 # MATHEMATICAL ITALIC SMALL T +1D462 >0075 # MATHEMATICAL ITALIC SMALL U +1D463 >0076 # MATHEMATICAL ITALIC SMALL V +1D464 >0077 # MATHEMATICAL ITALIC SMALL W +1D465 >0078 # MATHEMATICAL ITALIC SMALL X +1D466 >0079 # MATHEMATICAL ITALIC SMALL Y +1D467 >007A # MATHEMATICAL ITALIC SMALL Z +1D468 >0061 # MATHEMATICAL BOLD ITALIC CAPITAL A +1D469 >0062 # MATHEMATICAL BOLD ITALIC CAPITAL B +1D46A >0063 # MATHEMATICAL BOLD ITALIC CAPITAL C +1D46B >0064 # MATHEMATICAL BOLD ITALIC CAPITAL D +1D46C >0065 # MATHEMATICAL BOLD ITALIC CAPITAL E +1D46D >0066 # MATHEMATICAL BOLD ITALIC CAPITAL F +1D46E >0067 # MATHEMATICAL BOLD ITALIC CAPITAL G +1D46F >0068 # MATHEMATICAL BOLD ITALIC CAPITAL H +1D470 >0069 # MATHEMATICAL BOLD ITALIC CAPITAL I +1D471 >006A # MATHEMATICAL BOLD ITALIC CAPITAL J +1D472 >006B # MATHEMATICAL BOLD ITALIC CAPITAL K +1D473 >006C # MATHEMATICAL BOLD ITALIC CAPITAL L +1D474 >006D # MATHEMATICAL BOLD ITALIC CAPITAL M +1D475 >006E # MATHEMATICAL BOLD ITALIC CAPITAL N +1D476 >006F # MATHEMATICAL BOLD ITALIC CAPITAL O +1D477 >0070 # MATHEMATICAL BOLD ITALIC CAPITAL P +1D478 >0071 # MATHEMATICAL BOLD ITALIC CAPITAL Q +1D479 >0072 # MATHEMATICAL BOLD ITALIC CAPITAL R +1D47A >0073 # MATHEMATICAL BOLD ITALIC CAPITAL S +1D47B >0074 # MATHEMATICAL BOLD ITALIC CAPITAL T +1D47C >0075 # MATHEMATICAL BOLD ITALIC CAPITAL U +1D47D >0076 # MATHEMATICAL BOLD ITALIC CAPITAL V +1D47E >0077 # MATHEMATICAL BOLD ITALIC CAPITAL W +1D47F >0078 # MATHEMATICAL BOLD ITALIC CAPITAL X +1D480 >0079 # MATHEMATICAL BOLD ITALIC CAPITAL Y +1D481 >007A # MATHEMATICAL BOLD ITALIC CAPITAL Z +1D482 >0061 # MATHEMATICAL BOLD ITALIC SMALL A +1D483 >0062 # MATHEMATICAL BOLD ITALIC SMALL B +1D484 >0063 # MATHEMATICAL BOLD ITALIC SMALL C +1D485 >0064 # MATHEMATICAL BOLD ITALIC SMALL D +1D486 >0065 # MATHEMATICAL BOLD ITALIC SMALL E +1D487 >0066 # MATHEMATICAL BOLD ITALIC SMALL F +1D488 >0067 # MATHEMATICAL BOLD ITALIC SMALL G +1D489 >0068 # MATHEMATICAL BOLD ITALIC SMALL H +1D48A >0069 # MATHEMATICAL BOLD ITALIC SMALL I +1D48B >006A # MATHEMATICAL BOLD ITALIC SMALL J +1D48C >006B # MATHEMATICAL BOLD ITALIC SMALL K +1D48D >006C # MATHEMATICAL BOLD ITALIC SMALL L +1D48E >006D # MATHEMATICAL BOLD ITALIC SMALL M +1D48F >006E # MATHEMATICAL BOLD ITALIC SMALL N +1D490 >006F # MATHEMATICAL BOLD ITALIC SMALL O +1D491 >0070 # MATHEMATICAL BOLD ITALIC SMALL P +1D492 >0071 # MATHEMATICAL BOLD ITALIC SMALL Q +1D493 >0072 # MATHEMATICAL BOLD ITALIC SMALL R +1D494 >0073 # MATHEMATICAL BOLD ITALIC SMALL S +1D495 >0074 # MATHEMATICAL BOLD ITALIC SMALL T +1D496 >0075 # MATHEMATICAL BOLD ITALIC SMALL U +1D497 >0076 # MATHEMATICAL BOLD ITALIC SMALL V +1D498 >0077 # MATHEMATICAL BOLD ITALIC SMALL W +1D499 >0078 # MATHEMATICAL BOLD ITALIC SMALL X +1D49A >0079 # MATHEMATICAL BOLD ITALIC SMALL Y +1D49B >007A # MATHEMATICAL BOLD ITALIC SMALL Z +1D49C >0061 # MATHEMATICAL SCRIPT CAPITAL A +1D49D >FFFD # +1D49E >0063 # MATHEMATICAL SCRIPT CAPITAL C +1D49F >0064 # MATHEMATICAL SCRIPT CAPITAL D +1D4A0..1D4A1 >FFFD # .. +1D4A2 >0067 # MATHEMATICAL SCRIPT CAPITAL G +1D4A3..1D4A4 >FFFD # .. +1D4A5 >006A # MATHEMATICAL SCRIPT CAPITAL J +1D4A6 >006B # MATHEMATICAL SCRIPT CAPITAL K +1D4A7..1D4A8 >FFFD # .. +1D4A9 >006E # MATHEMATICAL SCRIPT CAPITAL N +1D4AA >006F # MATHEMATICAL SCRIPT CAPITAL O +1D4AB >0070 # MATHEMATICAL SCRIPT CAPITAL P +1D4AC >0071 # MATHEMATICAL SCRIPT CAPITAL Q +1D4AD >FFFD # +1D4AE >0073 # MATHEMATICAL SCRIPT CAPITAL S +1D4AF >0074 # MATHEMATICAL SCRIPT CAPITAL T +1D4B0 >0075 # MATHEMATICAL SCRIPT CAPITAL U +1D4B1 >0076 # MATHEMATICAL SCRIPT CAPITAL V +1D4B2 >0077 # MATHEMATICAL SCRIPT CAPITAL W +1D4B3 >0078 # MATHEMATICAL SCRIPT CAPITAL X +1D4B4 >0079 # MATHEMATICAL SCRIPT CAPITAL Y +1D4B5 >007A # MATHEMATICAL SCRIPT CAPITAL Z +1D4B6 >0061 # MATHEMATICAL SCRIPT SMALL A +1D4B7 >0062 # MATHEMATICAL SCRIPT SMALL B +1D4B8 >0063 # MATHEMATICAL SCRIPT SMALL C +1D4B9 >0064 # MATHEMATICAL SCRIPT SMALL D +1D4BA >FFFD # +1D4BB >0066 # MATHEMATICAL SCRIPT SMALL F +1D4BC >FFFD # +1D4BD >0068 # MATHEMATICAL SCRIPT SMALL H +1D4BE >0069 # MATHEMATICAL SCRIPT SMALL I +1D4BF >006A # MATHEMATICAL SCRIPT SMALL J +1D4C0 >006B # MATHEMATICAL SCRIPT SMALL K +1D4C1 >006C # MATHEMATICAL SCRIPT SMALL L +1D4C2 >006D # MATHEMATICAL SCRIPT SMALL M +1D4C3 >006E # MATHEMATICAL SCRIPT SMALL N +1D4C4 >FFFD # +1D4C5 >0070 # MATHEMATICAL SCRIPT SMALL P +1D4C6 >0071 # MATHEMATICAL SCRIPT SMALL Q +1D4C7 >0072 # MATHEMATICAL SCRIPT SMALL R +1D4C8 >0073 # MATHEMATICAL SCRIPT SMALL S +1D4C9 >0074 # MATHEMATICAL SCRIPT SMALL T +1D4CA >0075 # MATHEMATICAL SCRIPT SMALL U +1D4CB >0076 # MATHEMATICAL SCRIPT SMALL V +1D4CC >0077 # MATHEMATICAL SCRIPT SMALL W +1D4CD >0078 # MATHEMATICAL SCRIPT SMALL X +1D4CE >0079 # MATHEMATICAL SCRIPT SMALL Y +1D4CF >007A # MATHEMATICAL SCRIPT SMALL Z +1D4D0 >0061 # MATHEMATICAL BOLD SCRIPT CAPITAL A +1D4D1 >0062 # MATHEMATICAL BOLD SCRIPT CAPITAL B +1D4D2 >0063 # MATHEMATICAL BOLD SCRIPT CAPITAL C +1D4D3 >0064 # MATHEMATICAL BOLD SCRIPT CAPITAL D +1D4D4 >0065 # MATHEMATICAL BOLD SCRIPT CAPITAL E +1D4D5 >0066 # MATHEMATICAL BOLD SCRIPT CAPITAL F +1D4D6 >0067 # MATHEMATICAL BOLD SCRIPT CAPITAL G +1D4D7 >0068 # MATHEMATICAL BOLD SCRIPT CAPITAL H +1D4D8 >0069 # MATHEMATICAL BOLD SCRIPT CAPITAL I +1D4D9 >006A # MATHEMATICAL BOLD SCRIPT CAPITAL J +1D4DA >006B # MATHEMATICAL BOLD SCRIPT CAPITAL K +1D4DB >006C # MATHEMATICAL BOLD SCRIPT CAPITAL L +1D4DC >006D # MATHEMATICAL BOLD SCRIPT CAPITAL M +1D4DD >006E # MATHEMATICAL BOLD SCRIPT CAPITAL N +1D4DE >006F # MATHEMATICAL BOLD SCRIPT CAPITAL O +1D4DF >0070 # MATHEMATICAL BOLD SCRIPT CAPITAL P +1D4E0 >0071 # MATHEMATICAL BOLD SCRIPT CAPITAL Q +1D4E1 >0072 # MATHEMATICAL BOLD SCRIPT CAPITAL R +1D4E2 >0073 # MATHEMATICAL BOLD SCRIPT CAPITAL S +1D4E3 >0074 # MATHEMATICAL BOLD SCRIPT CAPITAL T +1D4E4 >0075 # MATHEMATICAL BOLD SCRIPT CAPITAL U +1D4E5 >0076 # MATHEMATICAL BOLD SCRIPT CAPITAL V +1D4E6 >0077 # MATHEMATICAL BOLD SCRIPT CAPITAL W +1D4E7 >0078 # MATHEMATICAL BOLD SCRIPT CAPITAL X +1D4E8 >0079 # MATHEMATICAL BOLD SCRIPT CAPITAL Y +1D4E9 >007A # MATHEMATICAL BOLD SCRIPT CAPITAL Z +1D4EA >0061 # MATHEMATICAL BOLD SCRIPT SMALL A +1D4EB >0062 # MATHEMATICAL BOLD SCRIPT SMALL B +1D4EC >0063 # MATHEMATICAL BOLD SCRIPT SMALL C +1D4ED >0064 # MATHEMATICAL BOLD SCRIPT SMALL D +1D4EE >0065 # MATHEMATICAL BOLD SCRIPT SMALL E +1D4EF >0066 # MATHEMATICAL BOLD SCRIPT SMALL F +1D4F0 >0067 # MATHEMATICAL BOLD SCRIPT SMALL G +1D4F1 >0068 # MATHEMATICAL BOLD SCRIPT SMALL H +1D4F2 >0069 # MATHEMATICAL BOLD SCRIPT SMALL I +1D4F3 >006A # MATHEMATICAL BOLD SCRIPT SMALL J +1D4F4 >006B # MATHEMATICAL BOLD SCRIPT SMALL K +1D4F5 >006C # MATHEMATICAL BOLD SCRIPT SMALL L +1D4F6 >006D # MATHEMATICAL BOLD SCRIPT SMALL M +1D4F7 >006E # MATHEMATICAL BOLD SCRIPT SMALL N +1D4F8 >006F # MATHEMATICAL BOLD SCRIPT SMALL O +1D4F9 >0070 # MATHEMATICAL BOLD SCRIPT SMALL P +1D4FA >0071 # MATHEMATICAL BOLD SCRIPT SMALL Q +1D4FB >0072 # MATHEMATICAL BOLD SCRIPT SMALL R +1D4FC >0073 # MATHEMATICAL BOLD SCRIPT SMALL S +1D4FD >0074 # MATHEMATICAL BOLD SCRIPT SMALL T +1D4FE >0075 # MATHEMATICAL BOLD SCRIPT SMALL U +1D4FF >0076 # MATHEMATICAL BOLD SCRIPT SMALL V +1D500 >0077 # MATHEMATICAL BOLD SCRIPT SMALL W +1D501 >0078 # MATHEMATICAL BOLD SCRIPT SMALL X +1D502 >0079 # MATHEMATICAL BOLD SCRIPT SMALL Y +1D503 >007A # MATHEMATICAL BOLD SCRIPT SMALL Z +1D504 >0061 # MATHEMATICAL FRAKTUR CAPITAL A +1D505 >0062 # MATHEMATICAL FRAKTUR CAPITAL B +1D506 >FFFD # +1D507 >0064 # MATHEMATICAL FRAKTUR CAPITAL D +1D508 >0065 # MATHEMATICAL FRAKTUR CAPITAL E +1D509 >0066 # MATHEMATICAL FRAKTUR CAPITAL F +1D50A >0067 # MATHEMATICAL FRAKTUR CAPITAL G +1D50B..1D50C >FFFD # .. +1D50D >006A # MATHEMATICAL FRAKTUR CAPITAL J +1D50E >006B # MATHEMATICAL FRAKTUR CAPITAL K +1D50F >006C # MATHEMATICAL FRAKTUR CAPITAL L +1D510 >006D # MATHEMATICAL FRAKTUR CAPITAL M +1D511 >006E # MATHEMATICAL FRAKTUR CAPITAL N +1D512 >006F # MATHEMATICAL FRAKTUR CAPITAL O +1D513 >0070 # MATHEMATICAL FRAKTUR CAPITAL P +1D514 >0071 # MATHEMATICAL FRAKTUR CAPITAL Q +1D515 >FFFD # +1D516 >0073 # MATHEMATICAL FRAKTUR CAPITAL S +1D517 >0074 # MATHEMATICAL FRAKTUR CAPITAL T +1D518 >0075 # MATHEMATICAL FRAKTUR CAPITAL U +1D519 >0076 # MATHEMATICAL FRAKTUR CAPITAL V +1D51A >0077 # MATHEMATICAL FRAKTUR CAPITAL W +1D51B >0078 # MATHEMATICAL FRAKTUR CAPITAL X +1D51C >0079 # MATHEMATICAL FRAKTUR CAPITAL Y +1D51D >FFFD # +1D51E >0061 # MATHEMATICAL FRAKTUR SMALL A +1D51F >0062 # MATHEMATICAL FRAKTUR SMALL B +1D520 >0063 # MATHEMATICAL FRAKTUR SMALL C +1D521 >0064 # MATHEMATICAL FRAKTUR SMALL D +1D522 >0065 # MATHEMATICAL FRAKTUR SMALL E +1D523 >0066 # MATHEMATICAL FRAKTUR SMALL F +1D524 >0067 # MATHEMATICAL FRAKTUR SMALL G +1D525 >0068 # MATHEMATICAL FRAKTUR SMALL H +1D526 >0069 # MATHEMATICAL FRAKTUR SMALL I +1D527 >006A # MATHEMATICAL FRAKTUR SMALL J +1D528 >006B # MATHEMATICAL FRAKTUR SMALL K +1D529 >006C # MATHEMATICAL FRAKTUR SMALL L +1D52A >006D # MATHEMATICAL FRAKTUR SMALL M +1D52B >006E # MATHEMATICAL FRAKTUR SMALL N +1D52C >006F # MATHEMATICAL FRAKTUR SMALL O +1D52D >0070 # MATHEMATICAL FRAKTUR SMALL P +1D52E >0071 # MATHEMATICAL FRAKTUR SMALL Q +1D52F >0072 # MATHEMATICAL FRAKTUR SMALL R +1D530 >0073 # MATHEMATICAL FRAKTUR SMALL S +1D531 >0074 # MATHEMATICAL FRAKTUR SMALL T +1D532 >0075 # MATHEMATICAL FRAKTUR SMALL U +1D533 >0076 # MATHEMATICAL FRAKTUR SMALL V +1D534 >0077 # MATHEMATICAL FRAKTUR SMALL W +1D535 >0078 # MATHEMATICAL FRAKTUR SMALL X +1D536 >0079 # MATHEMATICAL FRAKTUR SMALL Y +1D537 >007A # MATHEMATICAL FRAKTUR SMALL Z +1D538 >0061 # MATHEMATICAL DOUBLE-STRUCK CAPITAL A +1D539 >0062 # MATHEMATICAL DOUBLE-STRUCK CAPITAL B +1D53A >FFFD # +1D53B >0064 # MATHEMATICAL DOUBLE-STRUCK CAPITAL D +1D53C >0065 # MATHEMATICAL DOUBLE-STRUCK CAPITAL E +1D53D >0066 # MATHEMATICAL DOUBLE-STRUCK CAPITAL F +1D53E >0067 # MATHEMATICAL DOUBLE-STRUCK CAPITAL G +1D53F >FFFD # +1D540 >0069 # MATHEMATICAL DOUBLE-STRUCK CAPITAL I +1D541 >006A # MATHEMATICAL DOUBLE-STRUCK CAPITAL J +1D542 >006B # MATHEMATICAL DOUBLE-STRUCK CAPITAL K +1D543 >006C # MATHEMATICAL DOUBLE-STRUCK CAPITAL L +1D544 >006D # MATHEMATICAL DOUBLE-STRUCK CAPITAL M +1D545 >FFFD # +1D546 >006F # MATHEMATICAL DOUBLE-STRUCK CAPITAL O +1D547..1D549 >FFFD # .. +1D54A >0073 # MATHEMATICAL DOUBLE-STRUCK CAPITAL S +1D54B >0074 # MATHEMATICAL DOUBLE-STRUCK CAPITAL T +1D54C >0075 # MATHEMATICAL DOUBLE-STRUCK CAPITAL U +1D54D >0076 # MATHEMATICAL DOUBLE-STRUCK CAPITAL V +1D54E >0077 # MATHEMATICAL DOUBLE-STRUCK CAPITAL W +1D54F >0078 # MATHEMATICAL DOUBLE-STRUCK CAPITAL X +1D550 >0079 # MATHEMATICAL DOUBLE-STRUCK CAPITAL Y +1D551 >FFFD # +1D552 >0061 # MATHEMATICAL DOUBLE-STRUCK SMALL A +1D553 >0062 # MATHEMATICAL DOUBLE-STRUCK SMALL B +1D554 >0063 # MATHEMATICAL DOUBLE-STRUCK SMALL C +1D555 >0064 # MATHEMATICAL DOUBLE-STRUCK SMALL D +1D556 >0065 # MATHEMATICAL DOUBLE-STRUCK SMALL E +1D557 >0066 # MATHEMATICAL DOUBLE-STRUCK SMALL F +1D558 >0067 # MATHEMATICAL DOUBLE-STRUCK SMALL G +1D559 >0068 # MATHEMATICAL DOUBLE-STRUCK SMALL H +1D55A >0069 # MATHEMATICAL DOUBLE-STRUCK SMALL I +1D55B >006A # MATHEMATICAL DOUBLE-STRUCK SMALL J +1D55C >006B # MATHEMATICAL DOUBLE-STRUCK SMALL K +1D55D >006C # MATHEMATICAL DOUBLE-STRUCK SMALL L +1D55E >006D # MATHEMATICAL DOUBLE-STRUCK SMALL M +1D55F >006E # MATHEMATICAL DOUBLE-STRUCK SMALL N +1D560 >006F # MATHEMATICAL DOUBLE-STRUCK SMALL O +1D561 >0070 # MATHEMATICAL DOUBLE-STRUCK SMALL P +1D562 >0071 # MATHEMATICAL DOUBLE-STRUCK SMALL Q +1D563 >0072 # MATHEMATICAL DOUBLE-STRUCK SMALL R +1D564 >0073 # MATHEMATICAL DOUBLE-STRUCK SMALL S +1D565 >0074 # MATHEMATICAL DOUBLE-STRUCK SMALL T +1D566 >0075 # MATHEMATICAL DOUBLE-STRUCK SMALL U +1D567 >0076 # MATHEMATICAL DOUBLE-STRUCK SMALL V +1D568 >0077 # MATHEMATICAL DOUBLE-STRUCK SMALL W +1D569 >0078 # MATHEMATICAL DOUBLE-STRUCK SMALL X +1D56A >0079 # MATHEMATICAL DOUBLE-STRUCK SMALL Y +1D56B >007A # MATHEMATICAL DOUBLE-STRUCK SMALL Z +1D56C >0061 # MATHEMATICAL BOLD FRAKTUR CAPITAL A +1D56D >0062 # MATHEMATICAL BOLD FRAKTUR CAPITAL B +1D56E >0063 # MATHEMATICAL BOLD FRAKTUR CAPITAL C +1D56F >0064 # MATHEMATICAL BOLD FRAKTUR CAPITAL D +1D570 >0065 # MATHEMATICAL BOLD FRAKTUR CAPITAL E +1D571 >0066 # MATHEMATICAL BOLD FRAKTUR CAPITAL F +1D572 >0067 # MATHEMATICAL BOLD FRAKTUR CAPITAL G +1D573 >0068 # MATHEMATICAL BOLD FRAKTUR CAPITAL H +1D574 >0069 # MATHEMATICAL BOLD FRAKTUR CAPITAL I +1D575 >006A # MATHEMATICAL BOLD FRAKTUR CAPITAL J +1D576 >006B # MATHEMATICAL BOLD FRAKTUR CAPITAL K +1D577 >006C # MATHEMATICAL BOLD FRAKTUR CAPITAL L +1D578 >006D # MATHEMATICAL BOLD FRAKTUR CAPITAL M +1D579 >006E # MATHEMATICAL BOLD FRAKTUR CAPITAL N +1D57A >006F # MATHEMATICAL BOLD FRAKTUR CAPITAL O +1D57B >0070 # MATHEMATICAL BOLD FRAKTUR CAPITAL P +1D57C >0071 # MATHEMATICAL BOLD FRAKTUR CAPITAL Q +1D57D >0072 # MATHEMATICAL BOLD FRAKTUR CAPITAL R +1D57E >0073 # MATHEMATICAL BOLD FRAKTUR CAPITAL S +1D57F >0074 # MATHEMATICAL BOLD FRAKTUR CAPITAL T +1D580 >0075 # MATHEMATICAL BOLD FRAKTUR CAPITAL U +1D581 >0076 # MATHEMATICAL BOLD FRAKTUR CAPITAL V +1D582 >0077 # MATHEMATICAL BOLD FRAKTUR CAPITAL W +1D583 >0078 # MATHEMATICAL BOLD FRAKTUR CAPITAL X +1D584 >0079 # MATHEMATICAL BOLD FRAKTUR CAPITAL Y +1D585 >007A # MATHEMATICAL BOLD FRAKTUR CAPITAL Z +1D586 >0061 # MATHEMATICAL BOLD FRAKTUR SMALL A +1D587 >0062 # MATHEMATICAL BOLD FRAKTUR SMALL B +1D588 >0063 # MATHEMATICAL BOLD FRAKTUR SMALL C +1D589 >0064 # MATHEMATICAL BOLD FRAKTUR SMALL D +1D58A >0065 # MATHEMATICAL BOLD FRAKTUR SMALL E +1D58B >0066 # MATHEMATICAL BOLD FRAKTUR SMALL F +1D58C >0067 # MATHEMATICAL BOLD FRAKTUR SMALL G +1D58D >0068 # MATHEMATICAL BOLD FRAKTUR SMALL H +1D58E >0069 # MATHEMATICAL BOLD FRAKTUR SMALL I +1D58F >006A # MATHEMATICAL BOLD FRAKTUR SMALL J +1D590 >006B # MATHEMATICAL BOLD FRAKTUR SMALL K +1D591 >006C # MATHEMATICAL BOLD FRAKTUR SMALL L +1D592 >006D # MATHEMATICAL BOLD FRAKTUR SMALL M +1D593 >006E # MATHEMATICAL BOLD FRAKTUR SMALL N +1D594 >006F # MATHEMATICAL BOLD FRAKTUR SMALL O +1D595 >0070 # MATHEMATICAL BOLD FRAKTUR SMALL P +1D596 >0071 # MATHEMATICAL BOLD FRAKTUR SMALL Q +1D597 >0072 # MATHEMATICAL BOLD FRAKTUR SMALL R +1D598 >0073 # MATHEMATICAL BOLD FRAKTUR SMALL S +1D599 >0074 # MATHEMATICAL BOLD FRAKTUR SMALL T +1D59A >0075 # MATHEMATICAL BOLD FRAKTUR SMALL U +1D59B >0076 # MATHEMATICAL BOLD FRAKTUR SMALL V +1D59C >0077 # MATHEMATICAL BOLD FRAKTUR SMALL W +1D59D >0078 # MATHEMATICAL BOLD FRAKTUR SMALL X +1D59E >0079 # MATHEMATICAL BOLD FRAKTUR SMALL Y +1D59F >007A # MATHEMATICAL BOLD FRAKTUR SMALL Z +1D5A0 >0061 # MATHEMATICAL SANS-SERIF CAPITAL A +1D5A1 >0062 # MATHEMATICAL SANS-SERIF CAPITAL B +1D5A2 >0063 # MATHEMATICAL SANS-SERIF CAPITAL C +1D5A3 >0064 # MATHEMATICAL SANS-SERIF CAPITAL D +1D5A4 >0065 # MATHEMATICAL SANS-SERIF CAPITAL E +1D5A5 >0066 # MATHEMATICAL SANS-SERIF CAPITAL F +1D5A6 >0067 # MATHEMATICAL SANS-SERIF CAPITAL G +1D5A7 >0068 # MATHEMATICAL SANS-SERIF CAPITAL H +1D5A8 >0069 # MATHEMATICAL SANS-SERIF CAPITAL I +1D5A9 >006A # MATHEMATICAL SANS-SERIF CAPITAL J +1D5AA >006B # MATHEMATICAL SANS-SERIF CAPITAL K +1D5AB >006C # MATHEMATICAL SANS-SERIF CAPITAL L +1D5AC >006D # MATHEMATICAL SANS-SERIF CAPITAL M +1D5AD >006E # MATHEMATICAL SANS-SERIF CAPITAL N +1D5AE >006F # MATHEMATICAL SANS-SERIF CAPITAL O +1D5AF >0070 # MATHEMATICAL SANS-SERIF CAPITAL P +1D5B0 >0071 # MATHEMATICAL SANS-SERIF CAPITAL Q +1D5B1 >0072 # MATHEMATICAL SANS-SERIF CAPITAL R +1D5B2 >0073 # MATHEMATICAL SANS-SERIF CAPITAL S +1D5B3 >0074 # MATHEMATICAL SANS-SERIF CAPITAL T +1D5B4 >0075 # MATHEMATICAL SANS-SERIF CAPITAL U +1D5B5 >0076 # MATHEMATICAL SANS-SERIF CAPITAL V +1D5B6 >0077 # MATHEMATICAL SANS-SERIF CAPITAL W +1D5B7 >0078 # MATHEMATICAL SANS-SERIF CAPITAL X +1D5B8 >0079 # MATHEMATICAL SANS-SERIF CAPITAL Y +1D5B9 >007A # MATHEMATICAL SANS-SERIF CAPITAL Z +1D5BA >0061 # MATHEMATICAL SANS-SERIF SMALL A +1D5BB >0062 # MATHEMATICAL SANS-SERIF SMALL B +1D5BC >0063 # MATHEMATICAL SANS-SERIF SMALL C +1D5BD >0064 # MATHEMATICAL SANS-SERIF SMALL D +1D5BE >0065 # MATHEMATICAL SANS-SERIF SMALL E +1D5BF >0066 # MATHEMATICAL SANS-SERIF SMALL F +1D5C0 >0067 # MATHEMATICAL SANS-SERIF SMALL G +1D5C1 >0068 # MATHEMATICAL SANS-SERIF SMALL H +1D5C2 >0069 # MATHEMATICAL SANS-SERIF SMALL I +1D5C3 >006A # MATHEMATICAL SANS-SERIF SMALL J +1D5C4 >006B # MATHEMATICAL SANS-SERIF SMALL K +1D5C5 >006C # MATHEMATICAL SANS-SERIF SMALL L +1D5C6 >006D # MATHEMATICAL SANS-SERIF SMALL M +1D5C7 >006E # MATHEMATICAL SANS-SERIF SMALL N +1D5C8 >006F # MATHEMATICAL SANS-SERIF SMALL O +1D5C9 >0070 # MATHEMATICAL SANS-SERIF SMALL P +1D5CA >0071 # MATHEMATICAL SANS-SERIF SMALL Q +1D5CB >0072 # MATHEMATICAL SANS-SERIF SMALL R +1D5CC >0073 # MATHEMATICAL SANS-SERIF SMALL S +1D5CD >0074 # MATHEMATICAL SANS-SERIF SMALL T +1D5CE >0075 # MATHEMATICAL SANS-SERIF SMALL U +1D5CF >0076 # MATHEMATICAL SANS-SERIF SMALL V +1D5D0 >0077 # MATHEMATICAL SANS-SERIF SMALL W +1D5D1 >0078 # MATHEMATICAL SANS-SERIF SMALL X +1D5D2 >0079 # MATHEMATICAL SANS-SERIF SMALL Y +1D5D3 >007A # MATHEMATICAL SANS-SERIF SMALL Z +1D5D4 >0061 # MATHEMATICAL SANS-SERIF BOLD CAPITAL A +1D5D5 >0062 # MATHEMATICAL SANS-SERIF BOLD CAPITAL B +1D5D6 >0063 # MATHEMATICAL SANS-SERIF BOLD CAPITAL C +1D5D7 >0064 # MATHEMATICAL SANS-SERIF BOLD CAPITAL D +1D5D8 >0065 # MATHEMATICAL SANS-SERIF BOLD CAPITAL E +1D5D9 >0066 # MATHEMATICAL SANS-SERIF BOLD CAPITAL F +1D5DA >0067 # MATHEMATICAL SANS-SERIF BOLD CAPITAL G +1D5DB >0068 # MATHEMATICAL SANS-SERIF BOLD CAPITAL H +1D5DC >0069 # MATHEMATICAL SANS-SERIF BOLD CAPITAL I +1D5DD >006A # MATHEMATICAL SANS-SERIF BOLD CAPITAL J +1D5DE >006B # MATHEMATICAL SANS-SERIF BOLD CAPITAL K +1D5DF >006C # MATHEMATICAL SANS-SERIF BOLD CAPITAL L +1D5E0 >006D # MATHEMATICAL SANS-SERIF BOLD CAPITAL M +1D5E1 >006E # MATHEMATICAL SANS-SERIF BOLD CAPITAL N +1D5E2 >006F # MATHEMATICAL SANS-SERIF BOLD CAPITAL O +1D5E3 >0070 # MATHEMATICAL SANS-SERIF BOLD CAPITAL P +1D5E4 >0071 # MATHEMATICAL SANS-SERIF BOLD CAPITAL Q +1D5E5 >0072 # MATHEMATICAL SANS-SERIF BOLD CAPITAL R +1D5E6 >0073 # MATHEMATICAL SANS-SERIF BOLD CAPITAL S +1D5E7 >0074 # MATHEMATICAL SANS-SERIF BOLD CAPITAL T +1D5E8 >0075 # MATHEMATICAL SANS-SERIF BOLD CAPITAL U +1D5E9 >0076 # MATHEMATICAL SANS-SERIF BOLD CAPITAL V +1D5EA >0077 # MATHEMATICAL SANS-SERIF BOLD CAPITAL W +1D5EB >0078 # MATHEMATICAL SANS-SERIF BOLD CAPITAL X +1D5EC >0079 # MATHEMATICAL SANS-SERIF BOLD CAPITAL Y +1D5ED >007A # MATHEMATICAL SANS-SERIF BOLD CAPITAL Z +1D5EE >0061 # MATHEMATICAL SANS-SERIF BOLD SMALL A +1D5EF >0062 # MATHEMATICAL SANS-SERIF BOLD SMALL B +1D5F0 >0063 # MATHEMATICAL SANS-SERIF BOLD SMALL C +1D5F1 >0064 # MATHEMATICAL SANS-SERIF BOLD SMALL D +1D5F2 >0065 # MATHEMATICAL SANS-SERIF BOLD SMALL E +1D5F3 >0066 # MATHEMATICAL SANS-SERIF BOLD SMALL F +1D5F4 >0067 # MATHEMATICAL SANS-SERIF BOLD SMALL G +1D5F5 >0068 # MATHEMATICAL SANS-SERIF BOLD SMALL H +1D5F6 >0069 # MATHEMATICAL SANS-SERIF BOLD SMALL I +1D5F7 >006A # MATHEMATICAL SANS-SERIF BOLD SMALL J +1D5F8 >006B # MATHEMATICAL SANS-SERIF BOLD SMALL K +1D5F9 >006C # MATHEMATICAL SANS-SERIF BOLD SMALL L +1D5FA >006D # MATHEMATICAL SANS-SERIF BOLD SMALL M +1D5FB >006E # MATHEMATICAL SANS-SERIF BOLD SMALL N +1D5FC >006F # MATHEMATICAL SANS-SERIF BOLD SMALL O +1D5FD >0070 # MATHEMATICAL SANS-SERIF BOLD SMALL P +1D5FE >0071 # MATHEMATICAL SANS-SERIF BOLD SMALL Q +1D5FF >0072 # MATHEMATICAL SANS-SERIF BOLD SMALL R +1D600 >0073 # MATHEMATICAL SANS-SERIF BOLD SMALL S +1D601 >0074 # MATHEMATICAL SANS-SERIF BOLD SMALL T +1D602 >0075 # MATHEMATICAL SANS-SERIF BOLD SMALL U +1D603 >0076 # MATHEMATICAL SANS-SERIF BOLD SMALL V +1D604 >0077 # MATHEMATICAL SANS-SERIF BOLD SMALL W +1D605 >0078 # MATHEMATICAL SANS-SERIF BOLD SMALL X +1D606 >0079 # MATHEMATICAL SANS-SERIF BOLD SMALL Y +1D607 >007A # MATHEMATICAL SANS-SERIF BOLD SMALL Z +1D608 >0061 # MATHEMATICAL SANS-SERIF ITALIC CAPITAL A +1D609 >0062 # MATHEMATICAL SANS-SERIF ITALIC CAPITAL B +1D60A >0063 # MATHEMATICAL SANS-SERIF ITALIC CAPITAL C +1D60B >0064 # MATHEMATICAL SANS-SERIF ITALIC CAPITAL D +1D60C >0065 # MATHEMATICAL SANS-SERIF ITALIC CAPITAL E +1D60D >0066 # MATHEMATICAL SANS-SERIF ITALIC CAPITAL F +1D60E >0067 # MATHEMATICAL SANS-SERIF ITALIC CAPITAL G +1D60F >0068 # MATHEMATICAL SANS-SERIF ITALIC CAPITAL H +1D610 >0069 # MATHEMATICAL SANS-SERIF ITALIC CAPITAL I +1D611 >006A # MATHEMATICAL SANS-SERIF ITALIC CAPITAL J +1D612 >006B # MATHEMATICAL SANS-SERIF ITALIC CAPITAL K +1D613 >006C # MATHEMATICAL SANS-SERIF ITALIC CAPITAL L +1D614 >006D # MATHEMATICAL SANS-SERIF ITALIC CAPITAL M +1D615 >006E # MATHEMATICAL SANS-SERIF ITALIC CAPITAL N +1D616 >006F # MATHEMATICAL SANS-SERIF ITALIC CAPITAL O +1D617 >0070 # MATHEMATICAL SANS-SERIF ITALIC CAPITAL P +1D618 >0071 # MATHEMATICAL SANS-SERIF ITALIC CAPITAL Q +1D619 >0072 # MATHEMATICAL SANS-SERIF ITALIC CAPITAL R +1D61A >0073 # MATHEMATICAL SANS-SERIF ITALIC CAPITAL S +1D61B >0074 # MATHEMATICAL SANS-SERIF ITALIC CAPITAL T +1D61C >0075 # MATHEMATICAL SANS-SERIF ITALIC CAPITAL U +1D61D >0076 # MATHEMATICAL SANS-SERIF ITALIC CAPITAL V +1D61E >0077 # MATHEMATICAL SANS-SERIF ITALIC CAPITAL W +1D61F >0078 # MATHEMATICAL SANS-SERIF ITALIC CAPITAL X +1D620 >0079 # MATHEMATICAL SANS-SERIF ITALIC CAPITAL Y +1D621 >007A # MATHEMATICAL SANS-SERIF ITALIC CAPITAL Z +1D622 >0061 # MATHEMATICAL SANS-SERIF ITALIC SMALL A +1D623 >0062 # MATHEMATICAL SANS-SERIF ITALIC SMALL B +1D624 >0063 # MATHEMATICAL SANS-SERIF ITALIC SMALL C +1D625 >0064 # MATHEMATICAL SANS-SERIF ITALIC SMALL D +1D626 >0065 # MATHEMATICAL SANS-SERIF ITALIC SMALL E +1D627 >0066 # MATHEMATICAL SANS-SERIF ITALIC SMALL F +1D628 >0067 # MATHEMATICAL SANS-SERIF ITALIC SMALL G +1D629 >0068 # MATHEMATICAL SANS-SERIF ITALIC SMALL H +1D62A >0069 # MATHEMATICAL SANS-SERIF ITALIC SMALL I +1D62B >006A # MATHEMATICAL SANS-SERIF ITALIC SMALL J +1D62C >006B # MATHEMATICAL SANS-SERIF ITALIC SMALL K +1D62D >006C # MATHEMATICAL SANS-SERIF ITALIC SMALL L +1D62E >006D # MATHEMATICAL SANS-SERIF ITALIC SMALL M +1D62F >006E # MATHEMATICAL SANS-SERIF ITALIC SMALL N +1D630 >006F # MATHEMATICAL SANS-SERIF ITALIC SMALL O +1D631 >0070 # MATHEMATICAL SANS-SERIF ITALIC SMALL P +1D632 >0071 # MATHEMATICAL SANS-SERIF ITALIC SMALL Q +1D633 >0072 # MATHEMATICAL SANS-SERIF ITALIC SMALL R +1D634 >0073 # MATHEMATICAL SANS-SERIF ITALIC SMALL S +1D635 >0074 # MATHEMATICAL SANS-SERIF ITALIC SMALL T +1D636 >0075 # MATHEMATICAL SANS-SERIF ITALIC SMALL U +1D637 >0076 # MATHEMATICAL SANS-SERIF ITALIC SMALL V +1D638 >0077 # MATHEMATICAL SANS-SERIF ITALIC SMALL W +1D639 >0078 # MATHEMATICAL SANS-SERIF ITALIC SMALL X +1D63A >0079 # MATHEMATICAL SANS-SERIF ITALIC SMALL Y +1D63B >007A # MATHEMATICAL SANS-SERIF ITALIC SMALL Z +1D63C >0061 # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL A +1D63D >0062 # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL B +1D63E >0063 # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL C +1D63F >0064 # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL D +1D640 >0065 # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL E +1D641 >0066 # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL F +1D642 >0067 # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL G +1D643 >0068 # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL H +1D644 >0069 # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL I +1D645 >006A # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL J +1D646 >006B # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL K +1D647 >006C # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL L +1D648 >006D # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL M +1D649 >006E # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL N +1D64A >006F # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL O +1D64B >0070 # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL P +1D64C >0071 # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Q +1D64D >0072 # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL R +1D64E >0073 # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL S +1D64F >0074 # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL T +1D650 >0075 # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL U +1D651 >0076 # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL V +1D652 >0077 # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL W +1D653 >0078 # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL X +1D654 >0079 # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Y +1D655 >007A # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Z +1D656 >0061 # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL A +1D657 >0062 # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL B +1D658 >0063 # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL C +1D659 >0064 # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL D +1D65A >0065 # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL E +1D65B >0066 # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL F +1D65C >0067 # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL G +1D65D >0068 # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL H +1D65E >0069 # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL I +1D65F >006A # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL J +1D660 >006B # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL K +1D661 >006C # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL L +1D662 >006D # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL M +1D663 >006E # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL N +1D664 >006F # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL O +1D665 >0070 # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL P +1D666 >0071 # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Q +1D667 >0072 # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL R +1D668 >0073 # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL S +1D669 >0074 # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL T +1D66A >0075 # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL U +1D66B >0076 # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL V +1D66C >0077 # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL W +1D66D >0078 # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL X +1D66E >0079 # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Y +1D66F >007A # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Z +1D670 >0061 # MATHEMATICAL MONOSPACE CAPITAL A +1D671 >0062 # MATHEMATICAL MONOSPACE CAPITAL B +1D672 >0063 # MATHEMATICAL MONOSPACE CAPITAL C +1D673 >0064 # MATHEMATICAL MONOSPACE CAPITAL D +1D674 >0065 # MATHEMATICAL MONOSPACE CAPITAL E +1D675 >0066 # MATHEMATICAL MONOSPACE CAPITAL F +1D676 >0067 # MATHEMATICAL MONOSPACE CAPITAL G +1D677 >0068 # MATHEMATICAL MONOSPACE CAPITAL H +1D678 >0069 # MATHEMATICAL MONOSPACE CAPITAL I +1D679 >006A # MATHEMATICAL MONOSPACE CAPITAL J +1D67A >006B # MATHEMATICAL MONOSPACE CAPITAL K +1D67B >006C # MATHEMATICAL MONOSPACE CAPITAL L +1D67C >006D # MATHEMATICAL MONOSPACE CAPITAL M +1D67D >006E # MATHEMATICAL MONOSPACE CAPITAL N +1D67E >006F # MATHEMATICAL MONOSPACE CAPITAL O +1D67F >0070 # MATHEMATICAL MONOSPACE CAPITAL P +1D680 >0071 # MATHEMATICAL MONOSPACE CAPITAL Q +1D681 >0072 # MATHEMATICAL MONOSPACE CAPITAL R +1D682 >0073 # MATHEMATICAL MONOSPACE CAPITAL S +1D683 >0074 # MATHEMATICAL MONOSPACE CAPITAL T +1D684 >0075 # MATHEMATICAL MONOSPACE CAPITAL U +1D685 >0076 # MATHEMATICAL MONOSPACE CAPITAL V +1D686 >0077 # MATHEMATICAL MONOSPACE CAPITAL W +1D687 >0078 # MATHEMATICAL MONOSPACE CAPITAL X +1D688 >0079 # MATHEMATICAL MONOSPACE CAPITAL Y +1D689 >007A # MATHEMATICAL MONOSPACE CAPITAL Z +1D68A >0061 # MATHEMATICAL MONOSPACE SMALL A +1D68B >0062 # MATHEMATICAL MONOSPACE SMALL B +1D68C >0063 # MATHEMATICAL MONOSPACE SMALL C +1D68D >0064 # MATHEMATICAL MONOSPACE SMALL D +1D68E >0065 # MATHEMATICAL MONOSPACE SMALL E +1D68F >0066 # MATHEMATICAL MONOSPACE SMALL F +1D690 >0067 # MATHEMATICAL MONOSPACE SMALL G +1D691 >0068 # MATHEMATICAL MONOSPACE SMALL H +1D692 >0069 # MATHEMATICAL MONOSPACE SMALL I +1D693 >006A # MATHEMATICAL MONOSPACE SMALL J +1D694 >006B # MATHEMATICAL MONOSPACE SMALL K +1D695 >006C # MATHEMATICAL MONOSPACE SMALL L +1D696 >006D # MATHEMATICAL MONOSPACE SMALL M +1D697 >006E # MATHEMATICAL MONOSPACE SMALL N +1D698 >006F # MATHEMATICAL MONOSPACE SMALL O +1D699 >0070 # MATHEMATICAL MONOSPACE SMALL P +1D69A >0071 # MATHEMATICAL MONOSPACE SMALL Q +1D69B >0072 # MATHEMATICAL MONOSPACE SMALL R +1D69C >0073 # MATHEMATICAL MONOSPACE SMALL S +1D69D >0074 # MATHEMATICAL MONOSPACE SMALL T +1D69E >0075 # MATHEMATICAL MONOSPACE SMALL U +1D69F >0076 # MATHEMATICAL MONOSPACE SMALL V +1D6A0 >0077 # MATHEMATICAL MONOSPACE SMALL W +1D6A1 >0078 # MATHEMATICAL MONOSPACE SMALL X +1D6A2 >0079 # MATHEMATICAL MONOSPACE SMALL Y +1D6A3 >007A # MATHEMATICAL MONOSPACE SMALL Z +1D6A4 >0131 # MATHEMATICAL ITALIC SMALL DOTLESS I +1D6A5 >0237 # MATHEMATICAL ITALIC SMALL DOTLESS J +1D6A6..1D6A7 >FFFD # .. +1D6A8 >03B1 # MATHEMATICAL BOLD CAPITAL ALPHA +1D6A9 >03B2 # MATHEMATICAL BOLD CAPITAL BETA +1D6AA >03B3 # MATHEMATICAL BOLD CAPITAL GAMMA +1D6AB >03B4 # MATHEMATICAL BOLD CAPITAL DELTA +1D6AC >03B5 # MATHEMATICAL BOLD CAPITAL EPSILON +1D6AD >03B6 # MATHEMATICAL BOLD CAPITAL ZETA +1D6AE >03B7 # MATHEMATICAL BOLD CAPITAL ETA +1D6AF >03B8 # MATHEMATICAL BOLD CAPITAL THETA +1D6B0 >03B9 # MATHEMATICAL BOLD CAPITAL IOTA +1D6B1 >03BA # MATHEMATICAL BOLD CAPITAL KAPPA +1D6B2 >03BB # MATHEMATICAL BOLD CAPITAL LAMDA +1D6B3 >03BC # MATHEMATICAL BOLD CAPITAL MU +1D6B4 >03BD # MATHEMATICAL BOLD CAPITAL NU +1D6B5 >03BE # MATHEMATICAL BOLD CAPITAL XI +1D6B6 >03BF # MATHEMATICAL BOLD CAPITAL OMICRON +1D6B7 >03C0 # MATHEMATICAL BOLD CAPITAL PI +1D6B8 >03C1 # MATHEMATICAL BOLD CAPITAL RHO +1D6B9 >03B8 # MATHEMATICAL BOLD CAPITAL THETA SYMBOL +1D6BA >03C3 # MATHEMATICAL BOLD CAPITAL SIGMA +1D6BB >03C4 # MATHEMATICAL BOLD CAPITAL TAU +1D6BC >03C5 # MATHEMATICAL BOLD CAPITAL UPSILON +1D6BD >03C6 # MATHEMATICAL BOLD CAPITAL PHI +1D6BE >03C7 # MATHEMATICAL BOLD CAPITAL CHI +1D6BF >03C8 # MATHEMATICAL BOLD CAPITAL PSI +1D6C0 >03C9 # MATHEMATICAL BOLD CAPITAL OMEGA +1D6C1 >2207 # MATHEMATICAL BOLD NABLA +1D6C2 >03B1 # MATHEMATICAL BOLD SMALL ALPHA +1D6C3 >03B2 # MATHEMATICAL BOLD SMALL BETA +1D6C4 >03B3 # MATHEMATICAL BOLD SMALL GAMMA +1D6C5 >03B4 # MATHEMATICAL BOLD SMALL DELTA +1D6C6 >03B5 # MATHEMATICAL BOLD SMALL EPSILON +1D6C7 >03B6 # MATHEMATICAL BOLD SMALL ZETA +1D6C8 >03B7 # MATHEMATICAL BOLD SMALL ETA +1D6C9 >03B8 # MATHEMATICAL BOLD SMALL THETA +1D6CA >03B9 # MATHEMATICAL BOLD SMALL IOTA +1D6CB >03BA # MATHEMATICAL BOLD SMALL KAPPA +1D6CC >03BB # MATHEMATICAL BOLD SMALL LAMDA +1D6CD >03BC # MATHEMATICAL BOLD SMALL MU +1D6CE >03BD # MATHEMATICAL BOLD SMALL NU +1D6CF >03BE # MATHEMATICAL BOLD SMALL XI +1D6D0 >03BF # MATHEMATICAL BOLD SMALL OMICRON +1D6D1 >03C0 # MATHEMATICAL BOLD SMALL PI +1D6D2 >03C1 # MATHEMATICAL BOLD SMALL RHO +1D6D3..1D6D4 >03C3 # MATHEMATICAL BOLD SMALL FINAL SIGMA..MATHEMATICAL BOLD SMALL SIGMA +1D6D5 >03C4 # MATHEMATICAL BOLD SMALL TAU +1D6D6 >03C5 # MATHEMATICAL BOLD SMALL UPSILON +1D6D7 >03C6 # MATHEMATICAL BOLD SMALL PHI +1D6D8 >03C7 # MATHEMATICAL BOLD SMALL CHI +1D6D9 >03C8 # MATHEMATICAL BOLD SMALL PSI +1D6DA >03C9 # MATHEMATICAL BOLD SMALL OMEGA +1D6DB >2202 # MATHEMATICAL BOLD PARTIAL DIFFERENTIAL +1D6DC >03B5 # MATHEMATICAL BOLD EPSILON SYMBOL +1D6DD >03B8 # MATHEMATICAL BOLD THETA SYMBOL +1D6DE >03BA # MATHEMATICAL BOLD KAPPA SYMBOL +1D6DF >03C6 # MATHEMATICAL BOLD PHI SYMBOL +1D6E0 >03C1 # MATHEMATICAL BOLD RHO SYMBOL +1D6E1 >03C0 # MATHEMATICAL BOLD PI SYMBOL +1D6E2 >03B1 # MATHEMATICAL ITALIC CAPITAL ALPHA +1D6E3 >03B2 # MATHEMATICAL ITALIC CAPITAL BETA +1D6E4 >03B3 # MATHEMATICAL ITALIC CAPITAL GAMMA +1D6E5 >03B4 # MATHEMATICAL ITALIC CAPITAL DELTA +1D6E6 >03B5 # MATHEMATICAL ITALIC CAPITAL EPSILON +1D6E7 >03B6 # MATHEMATICAL ITALIC CAPITAL ZETA +1D6E8 >03B7 # MATHEMATICAL ITALIC CAPITAL ETA +1D6E9 >03B8 # MATHEMATICAL ITALIC CAPITAL THETA +1D6EA >03B9 # MATHEMATICAL ITALIC CAPITAL IOTA +1D6EB >03BA # MATHEMATICAL ITALIC CAPITAL KAPPA +1D6EC >03BB # MATHEMATICAL ITALIC CAPITAL LAMDA +1D6ED >03BC # MATHEMATICAL ITALIC CAPITAL MU +1D6EE >03BD # MATHEMATICAL ITALIC CAPITAL NU +1D6EF >03BE # MATHEMATICAL ITALIC CAPITAL XI +1D6F0 >03BF # MATHEMATICAL ITALIC CAPITAL OMICRON +1D6F1 >03C0 # MATHEMATICAL ITALIC CAPITAL PI +1D6F2 >03C1 # MATHEMATICAL ITALIC CAPITAL RHO +1D6F3 >03B8 # MATHEMATICAL ITALIC CAPITAL THETA SYMBOL +1D6F4 >03C3 # MATHEMATICAL ITALIC CAPITAL SIGMA +1D6F5 >03C4 # MATHEMATICAL ITALIC CAPITAL TAU +1D6F6 >03C5 # MATHEMATICAL ITALIC CAPITAL UPSILON +1D6F7 >03C6 # MATHEMATICAL ITALIC CAPITAL PHI +1D6F8 >03C7 # MATHEMATICAL ITALIC CAPITAL CHI +1D6F9 >03C8 # MATHEMATICAL ITALIC CAPITAL PSI +1D6FA >03C9 # MATHEMATICAL ITALIC CAPITAL OMEGA +1D6FB >2207 # MATHEMATICAL ITALIC NABLA +1D6FC >03B1 # MATHEMATICAL ITALIC SMALL ALPHA +1D6FD >03B2 # MATHEMATICAL ITALIC SMALL BETA +1D6FE >03B3 # MATHEMATICAL ITALIC SMALL GAMMA +1D6FF >03B4 # MATHEMATICAL ITALIC SMALL DELTA +1D700 >03B5 # MATHEMATICAL ITALIC SMALL EPSILON +1D701 >03B6 # MATHEMATICAL ITALIC SMALL ZETA +1D702 >03B7 # MATHEMATICAL ITALIC SMALL ETA +1D703 >03B8 # MATHEMATICAL ITALIC SMALL THETA +1D704 >03B9 # MATHEMATICAL ITALIC SMALL IOTA +1D705 >03BA # MATHEMATICAL ITALIC SMALL KAPPA +1D706 >03BB # MATHEMATICAL ITALIC SMALL LAMDA +1D707 >03BC # MATHEMATICAL ITALIC SMALL MU +1D708 >03BD # MATHEMATICAL ITALIC SMALL NU +1D709 >03BE # MATHEMATICAL ITALIC SMALL XI +1D70A >03BF # MATHEMATICAL ITALIC SMALL OMICRON +1D70B >03C0 # MATHEMATICAL ITALIC SMALL PI +1D70C >03C1 # MATHEMATICAL ITALIC SMALL RHO +1D70D..1D70E >03C3 # MATHEMATICAL ITALIC SMALL FINAL SIGMA..MATHEMATICAL ITALIC SMALL SIGMA +1D70F >03C4 # MATHEMATICAL ITALIC SMALL TAU +1D710 >03C5 # MATHEMATICAL ITALIC SMALL UPSILON +1D711 >03C6 # MATHEMATICAL ITALIC SMALL PHI +1D712 >03C7 # MATHEMATICAL ITALIC SMALL CHI +1D713 >03C8 # MATHEMATICAL ITALIC SMALL PSI +1D714 >03C9 # MATHEMATICAL ITALIC SMALL OMEGA +1D715 >2202 # MATHEMATICAL ITALIC PARTIAL DIFFERENTIAL +1D716 >03B5 # MATHEMATICAL ITALIC EPSILON SYMBOL +1D717 >03B8 # MATHEMATICAL ITALIC THETA SYMBOL +1D718 >03BA # MATHEMATICAL ITALIC KAPPA SYMBOL +1D719 >03C6 # MATHEMATICAL ITALIC PHI SYMBOL +1D71A >03C1 # MATHEMATICAL ITALIC RHO SYMBOL +1D71B >03C0 # MATHEMATICAL ITALIC PI SYMBOL +1D71C >03B1 # MATHEMATICAL BOLD ITALIC CAPITAL ALPHA +1D71D >03B2 # MATHEMATICAL BOLD ITALIC CAPITAL BETA +1D71E >03B3 # MATHEMATICAL BOLD ITALIC CAPITAL GAMMA +1D71F >03B4 # MATHEMATICAL BOLD ITALIC CAPITAL DELTA +1D720 >03B5 # MATHEMATICAL BOLD ITALIC CAPITAL EPSILON +1D721 >03B6 # MATHEMATICAL BOLD ITALIC CAPITAL ZETA +1D722 >03B7 # MATHEMATICAL BOLD ITALIC CAPITAL ETA +1D723 >03B8 # MATHEMATICAL BOLD ITALIC CAPITAL THETA +1D724 >03B9 # MATHEMATICAL BOLD ITALIC CAPITAL IOTA +1D725 >03BA # MATHEMATICAL BOLD ITALIC CAPITAL KAPPA +1D726 >03BB # MATHEMATICAL BOLD ITALIC CAPITAL LAMDA +1D727 >03BC # MATHEMATICAL BOLD ITALIC CAPITAL MU +1D728 >03BD # MATHEMATICAL BOLD ITALIC CAPITAL NU +1D729 >03BE # MATHEMATICAL BOLD ITALIC CAPITAL XI +1D72A >03BF # MATHEMATICAL BOLD ITALIC CAPITAL OMICRON +1D72B >03C0 # MATHEMATICAL BOLD ITALIC CAPITAL PI +1D72C >03C1 # MATHEMATICAL BOLD ITALIC CAPITAL RHO +1D72D >03B8 # MATHEMATICAL BOLD ITALIC CAPITAL THETA SYMBOL +1D72E >03C3 # MATHEMATICAL BOLD ITALIC CAPITAL SIGMA +1D72F >03C4 # MATHEMATICAL BOLD ITALIC CAPITAL TAU +1D730 >03C5 # MATHEMATICAL BOLD ITALIC CAPITAL UPSILON +1D731 >03C6 # MATHEMATICAL BOLD ITALIC CAPITAL PHI +1D732 >03C7 # MATHEMATICAL BOLD ITALIC CAPITAL CHI +1D733 >03C8 # MATHEMATICAL BOLD ITALIC CAPITAL PSI +1D734 >03C9 # MATHEMATICAL BOLD ITALIC CAPITAL OMEGA +1D735 >2207 # MATHEMATICAL BOLD ITALIC NABLA +1D736 >03B1 # MATHEMATICAL BOLD ITALIC SMALL ALPHA +1D737 >03B2 # MATHEMATICAL BOLD ITALIC SMALL BETA +1D738 >03B3 # MATHEMATICAL BOLD ITALIC SMALL GAMMA +1D739 >03B4 # MATHEMATICAL BOLD ITALIC SMALL DELTA +1D73A >03B5 # MATHEMATICAL BOLD ITALIC SMALL EPSILON +1D73B >03B6 # MATHEMATICAL BOLD ITALIC SMALL ZETA +1D73C >03B7 # MATHEMATICAL BOLD ITALIC SMALL ETA +1D73D >03B8 # MATHEMATICAL BOLD ITALIC SMALL THETA +1D73E >03B9 # MATHEMATICAL BOLD ITALIC SMALL IOTA +1D73F >03BA # MATHEMATICAL BOLD ITALIC SMALL KAPPA +1D740 >03BB # MATHEMATICAL BOLD ITALIC SMALL LAMDA +1D741 >03BC # MATHEMATICAL BOLD ITALIC SMALL MU +1D742 >03BD # MATHEMATICAL BOLD ITALIC SMALL NU +1D743 >03BE # MATHEMATICAL BOLD ITALIC SMALL XI +1D744 >03BF # MATHEMATICAL BOLD ITALIC SMALL OMICRON +1D745 >03C0 # MATHEMATICAL BOLD ITALIC SMALL PI +1D746 >03C1 # MATHEMATICAL BOLD ITALIC SMALL RHO +1D747..1D748 >03C3 # MATHEMATICAL BOLD ITALIC SMALL FINAL SIGMA..MATHEMATICAL BOLD ITALIC SMALL SIGMA +1D749 >03C4 # MATHEMATICAL BOLD ITALIC SMALL TAU +1D74A >03C5 # MATHEMATICAL BOLD ITALIC SMALL UPSILON +1D74B >03C6 # MATHEMATICAL BOLD ITALIC SMALL PHI +1D74C >03C7 # MATHEMATICAL BOLD ITALIC SMALL CHI +1D74D >03C8 # MATHEMATICAL BOLD ITALIC SMALL PSI +1D74E >03C9 # MATHEMATICAL BOLD ITALIC SMALL OMEGA +1D74F >2202 # MATHEMATICAL BOLD ITALIC PARTIAL DIFFERENTIAL +1D750 >03B5 # MATHEMATICAL BOLD ITALIC EPSILON SYMBOL +1D751 >03B8 # MATHEMATICAL BOLD ITALIC THETA SYMBOL +1D752 >03BA # MATHEMATICAL BOLD ITALIC KAPPA SYMBOL +1D753 >03C6 # MATHEMATICAL BOLD ITALIC PHI SYMBOL +1D754 >03C1 # MATHEMATICAL BOLD ITALIC RHO SYMBOL +1D755 >03C0 # MATHEMATICAL BOLD ITALIC PI SYMBOL +1D756 >03B1 # MATHEMATICAL SANS-SERIF BOLD CAPITAL ALPHA +1D757 >03B2 # MATHEMATICAL SANS-SERIF BOLD CAPITAL BETA +1D758 >03B3 # MATHEMATICAL SANS-SERIF BOLD CAPITAL GAMMA +1D759 >03B4 # MATHEMATICAL SANS-SERIF BOLD CAPITAL DELTA +1D75A >03B5 # MATHEMATICAL SANS-SERIF BOLD CAPITAL EPSILON +1D75B >03B6 # MATHEMATICAL SANS-SERIF BOLD CAPITAL ZETA +1D75C >03B7 # MATHEMATICAL SANS-SERIF BOLD CAPITAL ETA +1D75D >03B8 # MATHEMATICAL SANS-SERIF BOLD CAPITAL THETA +1D75E >03B9 # MATHEMATICAL SANS-SERIF BOLD CAPITAL IOTA +1D75F >03BA # MATHEMATICAL SANS-SERIF BOLD CAPITAL KAPPA +1D760 >03BB # MATHEMATICAL SANS-SERIF BOLD CAPITAL LAMDA +1D761 >03BC # MATHEMATICAL SANS-SERIF BOLD CAPITAL MU +1D762 >03BD # MATHEMATICAL SANS-SERIF BOLD CAPITAL NU +1D763 >03BE # MATHEMATICAL SANS-SERIF BOLD CAPITAL XI +1D764 >03BF # MATHEMATICAL SANS-SERIF BOLD CAPITAL OMICRON +1D765 >03C0 # MATHEMATICAL SANS-SERIF BOLD CAPITAL PI +1D766 >03C1 # MATHEMATICAL SANS-SERIF BOLD CAPITAL RHO +1D767 >03B8 # MATHEMATICAL SANS-SERIF BOLD CAPITAL THETA SYMBOL +1D768 >03C3 # MATHEMATICAL SANS-SERIF BOLD CAPITAL SIGMA +1D769 >03C4 # MATHEMATICAL SANS-SERIF BOLD CAPITAL TAU +1D76A >03C5 # MATHEMATICAL SANS-SERIF BOLD CAPITAL UPSILON +1D76B >03C6 # MATHEMATICAL SANS-SERIF BOLD CAPITAL PHI +1D76C >03C7 # MATHEMATICAL SANS-SERIF BOLD CAPITAL CHI +1D76D >03C8 # MATHEMATICAL SANS-SERIF BOLD CAPITAL PSI +1D76E >03C9 # MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA +1D76F >2207 # MATHEMATICAL SANS-SERIF BOLD NABLA +1D770 >03B1 # MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA +1D771 >03B2 # MATHEMATICAL SANS-SERIF BOLD SMALL BETA +1D772 >03B3 # MATHEMATICAL SANS-SERIF BOLD SMALL GAMMA +1D773 >03B4 # MATHEMATICAL SANS-SERIF BOLD SMALL DELTA +1D774 >03B5 # MATHEMATICAL SANS-SERIF BOLD SMALL EPSILON +1D775 >03B6 # MATHEMATICAL SANS-SERIF BOLD SMALL ZETA +1D776 >03B7 # MATHEMATICAL SANS-SERIF BOLD SMALL ETA +1D777 >03B8 # MATHEMATICAL SANS-SERIF BOLD SMALL THETA +1D778 >03B9 # MATHEMATICAL SANS-SERIF BOLD SMALL IOTA +1D779 >03BA # MATHEMATICAL SANS-SERIF BOLD SMALL KAPPA +1D77A >03BB # MATHEMATICAL SANS-SERIF BOLD SMALL LAMDA +1D77B >03BC # MATHEMATICAL SANS-SERIF BOLD SMALL MU +1D77C >03BD # MATHEMATICAL SANS-SERIF BOLD SMALL NU +1D77D >03BE # MATHEMATICAL SANS-SERIF BOLD SMALL XI +1D77E >03BF # MATHEMATICAL SANS-SERIF BOLD SMALL OMICRON +1D77F >03C0 # MATHEMATICAL SANS-SERIF BOLD SMALL PI +1D780 >03C1 # MATHEMATICAL SANS-SERIF BOLD SMALL RHO +1D781..1D782 >03C3 # MATHEMATICAL SANS-SERIF BOLD SMALL FINAL SIGMA..MATHEMATICAL SANS-SERIF BOLD SMALL SIGMA +1D783 >03C4 # MATHEMATICAL SANS-SERIF BOLD SMALL TAU +1D784 >03C5 # MATHEMATICAL SANS-SERIF BOLD SMALL UPSILON +1D785 >03C6 # MATHEMATICAL SANS-SERIF BOLD SMALL PHI +1D786 >03C7 # MATHEMATICAL SANS-SERIF BOLD SMALL CHI +1D787 >03C8 # MATHEMATICAL SANS-SERIF BOLD SMALL PSI +1D788 >03C9 # MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA +1D789 >2202 # MATHEMATICAL SANS-SERIF BOLD PARTIAL DIFFERENTIAL +1D78A >03B5 # MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL +1D78B >03B8 # MATHEMATICAL SANS-SERIF BOLD THETA SYMBOL +1D78C >03BA # MATHEMATICAL SANS-SERIF BOLD KAPPA SYMBOL +1D78D >03C6 # MATHEMATICAL SANS-SERIF BOLD PHI SYMBOL +1D78E >03C1 # MATHEMATICAL SANS-SERIF BOLD RHO SYMBOL +1D78F >03C0 # MATHEMATICAL SANS-SERIF BOLD PI SYMBOL +1D790 >03B1 # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ALPHA +1D791 >03B2 # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL BETA +1D792 >03B3 # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL GAMMA +1D793 >03B4 # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL DELTA +1D794 >03B5 # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL EPSILON +1D795 >03B6 # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ZETA +1D796 >03B7 # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ETA +1D797 >03B8 # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL THETA +1D798 >03B9 # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL IOTA +1D799 >03BA # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL KAPPA +1D79A >03BB # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL LAMDA +1D79B >03BC # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL MU +1D79C >03BD # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL NU +1D79D >03BE # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL XI +1D79E >03BF # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMICRON +1D79F >03C0 # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PI +1D7A0 >03C1 # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL RHO +1D7A1 >03B8 # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL THETA SYMBOL +1D7A2 >03C3 # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL SIGMA +1D7A3 >03C4 # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL TAU +1D7A4 >03C5 # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL UPSILON +1D7A5 >03C6 # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PHI +1D7A6 >03C7 # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL CHI +1D7A7 >03C8 # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PSI +1D7A8 >03C9 # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA +1D7A9 >2207 # MATHEMATICAL SANS-SERIF BOLD ITALIC NABLA +1D7AA >03B1 # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA +1D7AB >03B2 # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL BETA +1D7AC >03B3 # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL GAMMA +1D7AD >03B4 # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL DELTA +1D7AE >03B5 # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL EPSILON +1D7AF >03B6 # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ZETA +1D7B0 >03B7 # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ETA +1D7B1 >03B8 # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL THETA +1D7B2 >03B9 # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL IOTA +1D7B3 >03BA # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL KAPPA +1D7B4 >03BB # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL LAMDA +1D7B5 >03BC # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL MU +1D7B6 >03BD # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL NU +1D7B7 >03BE # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL XI +1D7B8 >03BF # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMICRON +1D7B9 >03C0 # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PI +1D7BA >03C1 # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL RHO +1D7BB..1D7BC >03C3 # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL FINAL SIGMA..MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL SIGMA +1D7BD >03C4 # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL TAU +1D7BE >03C5 # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL UPSILON +1D7BF >03C6 # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PHI +1D7C0 >03C7 # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL CHI +1D7C1 >03C8 # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PSI +1D7C2 >03C9 # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA +1D7C3 >2202 # MATHEMATICAL SANS-SERIF BOLD ITALIC PARTIAL DIFFERENTIAL +1D7C4 >03B5 # MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL +1D7C5 >03B8 # MATHEMATICAL SANS-SERIF BOLD ITALIC THETA SYMBOL +1D7C6 >03BA # MATHEMATICAL SANS-SERIF BOLD ITALIC KAPPA SYMBOL +1D7C7 >03C6 # MATHEMATICAL SANS-SERIF BOLD ITALIC PHI SYMBOL +1D7C8 >03C1 # MATHEMATICAL SANS-SERIF BOLD ITALIC RHO SYMBOL +1D7C9 >03C0 # MATHEMATICAL SANS-SERIF BOLD ITALIC PI SYMBOL +1D7CA..1D7CB >03DD # MATHEMATICAL BOLD CAPITAL DIGAMMA..MATHEMATICAL BOLD SMALL DIGAMMA +1D7CC..1D7CD >FFFD # .. +1D7CE >0030 # MATHEMATICAL BOLD DIGIT ZERO +1D7CF >0031 # MATHEMATICAL BOLD DIGIT ONE +1D7D0 >0032 # MATHEMATICAL BOLD DIGIT TWO +1D7D1 >0033 # MATHEMATICAL BOLD DIGIT THREE +1D7D2 >0034 # MATHEMATICAL BOLD DIGIT FOUR +1D7D3 >0035 # MATHEMATICAL BOLD DIGIT FIVE +1D7D4 >0036 # MATHEMATICAL BOLD DIGIT SIX +1D7D5 >0037 # MATHEMATICAL BOLD DIGIT SEVEN +1D7D6 >0038 # MATHEMATICAL BOLD DIGIT EIGHT +1D7D7 >0039 # MATHEMATICAL BOLD DIGIT NINE +1D7D8 >0030 # MATHEMATICAL DOUBLE-STRUCK DIGIT ZERO +1D7D9 >0031 # MATHEMATICAL DOUBLE-STRUCK DIGIT ONE +1D7DA >0032 # MATHEMATICAL DOUBLE-STRUCK DIGIT TWO +1D7DB >0033 # MATHEMATICAL DOUBLE-STRUCK DIGIT THREE +1D7DC >0034 # MATHEMATICAL DOUBLE-STRUCK DIGIT FOUR +1D7DD >0035 # MATHEMATICAL DOUBLE-STRUCK DIGIT FIVE +1D7DE >0036 # MATHEMATICAL DOUBLE-STRUCK DIGIT SIX +1D7DF >0037 # MATHEMATICAL DOUBLE-STRUCK DIGIT SEVEN +1D7E0 >0038 # MATHEMATICAL DOUBLE-STRUCK DIGIT EIGHT +1D7E1 >0039 # MATHEMATICAL DOUBLE-STRUCK DIGIT NINE +1D7E2 >0030 # MATHEMATICAL SANS-SERIF DIGIT ZERO +1D7E3 >0031 # MATHEMATICAL SANS-SERIF DIGIT ONE +1D7E4 >0032 # MATHEMATICAL SANS-SERIF DIGIT TWO +1D7E5 >0033 # MATHEMATICAL SANS-SERIF DIGIT THREE +1D7E6 >0034 # MATHEMATICAL SANS-SERIF DIGIT FOUR +1D7E7 >0035 # MATHEMATICAL SANS-SERIF DIGIT FIVE +1D7E8 >0036 # MATHEMATICAL SANS-SERIF DIGIT SIX +1D7E9 >0037 # MATHEMATICAL SANS-SERIF DIGIT SEVEN +1D7EA >0038 # MATHEMATICAL SANS-SERIF DIGIT EIGHT +1D7EB >0039 # MATHEMATICAL SANS-SERIF DIGIT NINE +1D7EC >0030 # MATHEMATICAL SANS-SERIF BOLD DIGIT ZERO +1D7ED >0031 # MATHEMATICAL SANS-SERIF BOLD DIGIT ONE +1D7EE >0032 # MATHEMATICAL SANS-SERIF BOLD DIGIT TWO +1D7EF >0033 # MATHEMATICAL SANS-SERIF BOLD DIGIT THREE +1D7F0 >0034 # MATHEMATICAL SANS-SERIF BOLD DIGIT FOUR +1D7F1 >0035 # MATHEMATICAL SANS-SERIF BOLD DIGIT FIVE +1D7F2 >0036 # MATHEMATICAL SANS-SERIF BOLD DIGIT SIX +1D7F3 >0037 # MATHEMATICAL SANS-SERIF BOLD DIGIT SEVEN +1D7F4 >0038 # MATHEMATICAL SANS-SERIF BOLD DIGIT EIGHT +1D7F5 >0039 # MATHEMATICAL SANS-SERIF BOLD DIGIT NINE +1D7F6 >0030 # MATHEMATICAL MONOSPACE DIGIT ZERO +1D7F7 >0031 # MATHEMATICAL MONOSPACE DIGIT ONE +1D7F8 >0032 # MATHEMATICAL MONOSPACE DIGIT TWO +1D7F9 >0033 # MATHEMATICAL MONOSPACE DIGIT THREE +1D7FA >0034 # MATHEMATICAL MONOSPACE DIGIT FOUR +1D7FB >0035 # MATHEMATICAL MONOSPACE DIGIT FIVE +1D7FC >0036 # MATHEMATICAL MONOSPACE DIGIT SIX +1D7FD >0037 # MATHEMATICAL MONOSPACE DIGIT SEVEN +1D7FE >0038 # MATHEMATICAL MONOSPACE DIGIT EIGHT +1D7FF >0039 # MATHEMATICAL MONOSPACE DIGIT NINE +1D800..1EFFF >FFFD # .. +# 1F000..1F02Bvalid # MAHJONG TILE EAST WIND..MAHJONG TILE BACK +1F02C..1F02F >FFFD # .. +# 1F030..1F093valid # DOMINO TILE HORIZONTAL BACK..DOMINO TILE VERTICAL-06-06 +1F094..1F0FF >FFFD # .. +1F100..1F10A >FFFD # DIGIT ZERO FULL STOP..DIGIT NINE COMMA +1F10B..1F10F >FFFD # .. +1F110..1F129 >FFFD # PARENTHESIZED LATIN CAPITAL LETTER A..PARENTHESIZED LATIN CAPITAL LETTER Z +1F12A >3014 0073 3015 # TORTOISE SHELL BRACKETED LATIN CAPITAL LETTER S +1F12B >0063 # CIRCLED ITALIC LATIN CAPITAL LETTER C +1F12C >0072 # CIRCLED ITALIC LATIN CAPITAL LETTER R +1F12D >0063 0064 # CIRCLED CD +1F12E >0077 007A # CIRCLED WZ +1F12F..1F130 >FFFD # .. +1F131 >0062 # SQUARED LATIN CAPITAL LETTER B +1F132..1F13C >FFFD # .. +1F13D >006E # SQUARED LATIN CAPITAL LETTER N +1F13E >FFFD # +1F13F >0070 # SQUARED LATIN CAPITAL LETTER P +1F140..1F141 >FFFD # .. +1F142 >0073 # SQUARED LATIN CAPITAL LETTER S +1F143..1F145 >FFFD # .. +1F146 >0077 # SQUARED LATIN CAPITAL LETTER W +1F147..1F149 >FFFD # .. +1F14A >0068 0076 # SQUARED HV +1F14B >006D 0076 # SQUARED MV +1F14C >0073 0064 # SQUARED SD +1F14D >0073 0073 # SQUARED SS +1F14E >0070 0070 0076 # SQUARED PPV +1F14F..1F156 >FFFD # .. +# 1F157 valid # NEGATIVE CIRCLED LATIN CAPITAL LETTER H +1F158..1F15E >FFFD # .. +# 1F15F valid # NEGATIVE CIRCLED LATIN CAPITAL LETTER P +1F160..1F178 >FFFD # .. +# 1F179 valid # NEGATIVE SQUARED LATIN CAPITAL LETTER J +1F17A >FFFD # +# 1F17B..1F17Cvalid # NEGATIVE SQUARED LATIN CAPITAL LETTER L..NEGATIVE SQUARED LATIN CAPITAL LETTER M +1F17D..1F17E >FFFD # .. +# 1F17F valid # NEGATIVE SQUARED LATIN CAPITAL LETTER P +1F180..1F189 >FFFD # .. +# 1F18A..1F18Dvalid # CROSSED NEGATIVE SQUARED LATIN CAPITAL LETTER P..NEGATIVE SQUARED SA +1F18E..1F18F >FFFD # .. +1F190 >0064 006A # SQUARE DJ +1F191..1F1FF >FFFD # .. +1F200 >307B 304B # SQUARE HIRAGANA HOKA +1F201..1F20F >FFFD # .. +1F210 >624B # SQUARED CJK UNIFIED IDEOGRAPH-624B +1F211 >5B57 # SQUARED CJK UNIFIED IDEOGRAPH-5B57 +1F212 >53CC # SQUARED CJK UNIFIED IDEOGRAPH-53CC +1F213 >30C7 # SQUARED KATAKANA DE +1F214 >4E8C # SQUARED CJK UNIFIED IDEOGRAPH-4E8C +1F215 >591A # SQUARED CJK UNIFIED IDEOGRAPH-591A +1F216 >89E3 # SQUARED CJK UNIFIED IDEOGRAPH-89E3 +1F217 >5929 # SQUARED CJK UNIFIED IDEOGRAPH-5929 +1F218 >4EA4 # SQUARED CJK UNIFIED IDEOGRAPH-4EA4 +1F219 >6620 # SQUARED CJK UNIFIED IDEOGRAPH-6620 +1F21A >7121 # SQUARED CJK UNIFIED IDEOGRAPH-7121 +1F21B >6599 # SQUARED CJK UNIFIED IDEOGRAPH-6599 +1F21C >524D # SQUARED CJK UNIFIED IDEOGRAPH-524D +1F21D >5F8C # SQUARED CJK UNIFIED IDEOGRAPH-5F8C +1F21E >518D # SQUARED CJK UNIFIED IDEOGRAPH-518D +1F21F >65B0 # SQUARED CJK UNIFIED IDEOGRAPH-65B0 +1F220 >521D # SQUARED CJK UNIFIED IDEOGRAPH-521D +1F221 >7D42 # SQUARED CJK UNIFIED IDEOGRAPH-7D42 +1F222 >751F # SQUARED CJK UNIFIED IDEOGRAPH-751F +1F223 >8CA9 # SQUARED CJK UNIFIED IDEOGRAPH-8CA9 +1F224 >58F0 # SQUARED CJK UNIFIED IDEOGRAPH-58F0 +1F225 >5439 # SQUARED CJK UNIFIED IDEOGRAPH-5439 +1F226 >6F14 # SQUARED CJK UNIFIED IDEOGRAPH-6F14 +1F227 >6295 # SQUARED CJK UNIFIED IDEOGRAPH-6295 +1F228 >6355 # SQUARED CJK UNIFIED IDEOGRAPH-6355 +1F229 >4E00 # SQUARED CJK UNIFIED IDEOGRAPH-4E00 +1F22A >4E09 # SQUARED CJK UNIFIED IDEOGRAPH-4E09 +1F22B >904A # SQUARED CJK UNIFIED IDEOGRAPH-904A +1F22C >5DE6 # SQUARED CJK UNIFIED IDEOGRAPH-5DE6 +1F22D >4E2D # SQUARED CJK UNIFIED IDEOGRAPH-4E2D +1F22E >53F3 # SQUARED CJK UNIFIED IDEOGRAPH-53F3 +1F22F >6307 # SQUARED CJK UNIFIED IDEOGRAPH-6307 +1F230 >8D70 # SQUARED CJK UNIFIED IDEOGRAPH-8D70 +1F231 >6253 # SQUARED CJK UNIFIED IDEOGRAPH-6253 +1F232..1F23F >FFFD # .. +1F240 >3014 672C 3015 # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-672C +1F241 >3014 4E09 3015 # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-4E09 +1F242 >3014 4E8C 3015 # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-4E8C +1F243 >3014 5B89 3015 # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-5B89 +1F244 >3014 70B9 3015 # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-70B9 +1F245 >3014 6253 3015 # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6253 +1F246 >3014 76D7 3015 # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-76D7 +1F247 >3014 52DD 3015 # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-52DD +1F248 >3014 6557 3015 # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6557 +1F249..1FFFF >FFFD # .. +# 20000..2A6D6valid # CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6D6 +2A6D7..2A6FF >FFFD # .. +# 2A700..2B734valid # CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B734 +2B735..2F7FF >FFFD # .. +2F800 >4E3D # CJK COMPATIBILITY IDEOGRAPH-2F800 +2F801 >4E38 # CJK COMPATIBILITY IDEOGRAPH-2F801 +2F802 >4E41 # CJK COMPATIBILITY IDEOGRAPH-2F802 +2F803 >20122 # CJK COMPATIBILITY IDEOGRAPH-2F803 +2F804 >4F60 # CJK COMPATIBILITY IDEOGRAPH-2F804 +2F805 >4FAE # CJK COMPATIBILITY IDEOGRAPH-2F805 +2F806 >4FBB # CJK COMPATIBILITY IDEOGRAPH-2F806 +2F807 >5002 # CJK COMPATIBILITY IDEOGRAPH-2F807 +2F808 >507A # CJK COMPATIBILITY IDEOGRAPH-2F808 +2F809 >5099 # CJK COMPATIBILITY IDEOGRAPH-2F809 +2F80A >50E7 # CJK COMPATIBILITY IDEOGRAPH-2F80A +2F80B >50CF # CJK COMPATIBILITY IDEOGRAPH-2F80B +2F80C >349E # CJK COMPATIBILITY IDEOGRAPH-2F80C +2F80D >2063A # CJK COMPATIBILITY IDEOGRAPH-2F80D +2F80E >514D # CJK COMPATIBILITY IDEOGRAPH-2F80E +2F80F >5154 # CJK COMPATIBILITY IDEOGRAPH-2F80F +2F810 >5164 # CJK COMPATIBILITY IDEOGRAPH-2F810 +2F811 >5177 # CJK COMPATIBILITY IDEOGRAPH-2F811 +2F812 >2051C # CJK COMPATIBILITY IDEOGRAPH-2F812 +2F813 >34B9 # CJK COMPATIBILITY IDEOGRAPH-2F813 +2F814 >5167 # CJK COMPATIBILITY IDEOGRAPH-2F814 +2F815 >518D # CJK COMPATIBILITY IDEOGRAPH-2F815 +2F816 >2054B # CJK COMPATIBILITY IDEOGRAPH-2F816 +2F817 >5197 # CJK COMPATIBILITY IDEOGRAPH-2F817 +2F818 >51A4 # CJK COMPATIBILITY IDEOGRAPH-2F818 +2F819 >4ECC # CJK COMPATIBILITY IDEOGRAPH-2F819 +2F81A >51AC # CJK COMPATIBILITY IDEOGRAPH-2F81A +2F81B >51B5 # CJK COMPATIBILITY IDEOGRAPH-2F81B +2F81C >291DF # CJK COMPATIBILITY IDEOGRAPH-2F81C +2F81D >51F5 # CJK COMPATIBILITY IDEOGRAPH-2F81D +2F81E >5203 # CJK COMPATIBILITY IDEOGRAPH-2F81E +2F81F >34DF # CJK COMPATIBILITY IDEOGRAPH-2F81F +2F820 >523B # CJK COMPATIBILITY IDEOGRAPH-2F820 +2F821 >5246 # CJK COMPATIBILITY IDEOGRAPH-2F821 +2F822 >5272 # CJK COMPATIBILITY IDEOGRAPH-2F822 +2F823 >5277 # CJK COMPATIBILITY IDEOGRAPH-2F823 +2F824 >3515 # CJK COMPATIBILITY IDEOGRAPH-2F824 +2F825 >52C7 # CJK COMPATIBILITY IDEOGRAPH-2F825 +2F826 >52C9 # CJK COMPATIBILITY IDEOGRAPH-2F826 +2F827 >52E4 # CJK COMPATIBILITY IDEOGRAPH-2F827 +2F828 >52FA # CJK COMPATIBILITY IDEOGRAPH-2F828 +2F829 >5305 # CJK COMPATIBILITY IDEOGRAPH-2F829 +2F82A >5306 # CJK COMPATIBILITY IDEOGRAPH-2F82A +2F82B >5317 # CJK COMPATIBILITY IDEOGRAPH-2F82B +2F82C >5349 # CJK COMPATIBILITY IDEOGRAPH-2F82C +2F82D >5351 # CJK COMPATIBILITY IDEOGRAPH-2F82D +2F82E >535A # CJK COMPATIBILITY IDEOGRAPH-2F82E +2F82F >5373 # CJK COMPATIBILITY IDEOGRAPH-2F82F +2F830 >537D # CJK COMPATIBILITY IDEOGRAPH-2F830 +2F831..2F833 >537F # CJK COMPATIBILITY IDEOGRAPH-2F831..CJK COMPATIBILITY IDEOGRAPH-2F833 +2F834 >20A2C # CJK COMPATIBILITY IDEOGRAPH-2F834 +2F835 >7070 # CJK COMPATIBILITY IDEOGRAPH-2F835 +2F836 >53CA # CJK COMPATIBILITY IDEOGRAPH-2F836 +2F837 >53DF # CJK COMPATIBILITY IDEOGRAPH-2F837 +2F838 >20B63 # CJK COMPATIBILITY IDEOGRAPH-2F838 +2F839 >53EB # CJK COMPATIBILITY IDEOGRAPH-2F839 +2F83A >53F1 # CJK COMPATIBILITY IDEOGRAPH-2F83A +2F83B >5406 # CJK COMPATIBILITY IDEOGRAPH-2F83B +2F83C >549E # CJK COMPATIBILITY IDEOGRAPH-2F83C +2F83D >5438 # CJK COMPATIBILITY IDEOGRAPH-2F83D +2F83E >5448 # CJK COMPATIBILITY IDEOGRAPH-2F83E +2F83F >5468 # CJK COMPATIBILITY IDEOGRAPH-2F83F +2F840 >54A2 # CJK COMPATIBILITY IDEOGRAPH-2F840 +2F841 >54F6 # CJK COMPATIBILITY IDEOGRAPH-2F841 +2F842 >5510 # CJK COMPATIBILITY IDEOGRAPH-2F842 +2F843 >5553 # CJK COMPATIBILITY IDEOGRAPH-2F843 +2F844 >5563 # CJK COMPATIBILITY IDEOGRAPH-2F844 +2F845..2F846 >5584 # CJK COMPATIBILITY IDEOGRAPH-2F845..CJK COMPATIBILITY IDEOGRAPH-2F846 +2F847 >5599 # CJK COMPATIBILITY IDEOGRAPH-2F847 +2F848 >55AB # CJK COMPATIBILITY IDEOGRAPH-2F848 +2F849 >55B3 # CJK COMPATIBILITY IDEOGRAPH-2F849 +2F84A >55C2 # CJK COMPATIBILITY IDEOGRAPH-2F84A +2F84B >5716 # CJK COMPATIBILITY IDEOGRAPH-2F84B +2F84C >5606 # CJK COMPATIBILITY IDEOGRAPH-2F84C +2F84D >5717 # CJK COMPATIBILITY IDEOGRAPH-2F84D +2F84E >5651 # CJK COMPATIBILITY IDEOGRAPH-2F84E +2F84F >5674 # CJK COMPATIBILITY IDEOGRAPH-2F84F +2F850 >5207 # CJK COMPATIBILITY IDEOGRAPH-2F850 +2F851 >58EE # CJK COMPATIBILITY IDEOGRAPH-2F851 +2F852 >57CE # CJK COMPATIBILITY IDEOGRAPH-2F852 +2F853 >57F4 # CJK COMPATIBILITY IDEOGRAPH-2F853 +2F854 >580D # CJK COMPATIBILITY IDEOGRAPH-2F854 +2F855 >578B # CJK COMPATIBILITY IDEOGRAPH-2F855 +2F856 >5832 # CJK COMPATIBILITY IDEOGRAPH-2F856 +2F857 >5831 # CJK COMPATIBILITY IDEOGRAPH-2F857 +2F858 >58AC # CJK COMPATIBILITY IDEOGRAPH-2F858 +2F859 >214E4 # CJK COMPATIBILITY IDEOGRAPH-2F859 +2F85A >58F2 # CJK COMPATIBILITY IDEOGRAPH-2F85A +2F85B >58F7 # CJK COMPATIBILITY IDEOGRAPH-2F85B +2F85C >5906 # CJK COMPATIBILITY IDEOGRAPH-2F85C +2F85D >591A # CJK COMPATIBILITY IDEOGRAPH-2F85D +2F85E >5922 # CJK COMPATIBILITY IDEOGRAPH-2F85E +2F85F >5962 # CJK COMPATIBILITY IDEOGRAPH-2F85F +2F860 >216A8 # CJK COMPATIBILITY IDEOGRAPH-2F860 +2F861 >216EA # CJK COMPATIBILITY IDEOGRAPH-2F861 +2F862 >59EC # CJK COMPATIBILITY IDEOGRAPH-2F862 +2F863 >5A1B # CJK COMPATIBILITY IDEOGRAPH-2F863 +2F864 >5A27 # CJK COMPATIBILITY IDEOGRAPH-2F864 +2F865 >59D8 # CJK COMPATIBILITY IDEOGRAPH-2F865 +2F866 >5A66 # CJK COMPATIBILITY IDEOGRAPH-2F866 +2F867 >36EE # CJK COMPATIBILITY IDEOGRAPH-2F867 +2F868 >FFFD # CJK COMPATIBILITY IDEOGRAPH-2F868 +2F869 >5B08 # CJK COMPATIBILITY IDEOGRAPH-2F869 +2F86A..2F86B >5B3E # CJK COMPATIBILITY IDEOGRAPH-2F86A..CJK COMPATIBILITY IDEOGRAPH-2F86B +2F86C >219C8 # CJK COMPATIBILITY IDEOGRAPH-2F86C +2F86D >5BC3 # CJK COMPATIBILITY IDEOGRAPH-2F86D +2F86E >5BD8 # CJK COMPATIBILITY IDEOGRAPH-2F86E +2F86F >5BE7 # CJK COMPATIBILITY IDEOGRAPH-2F86F +2F870 >5BF3 # CJK COMPATIBILITY IDEOGRAPH-2F870 +2F871 >21B18 # CJK COMPATIBILITY IDEOGRAPH-2F871 +2F872 >5BFF # CJK COMPATIBILITY IDEOGRAPH-2F872 +2F873 >5C06 # CJK COMPATIBILITY IDEOGRAPH-2F873 +2F874 >FFFD # CJK COMPATIBILITY IDEOGRAPH-2F874 +2F875 >5C22 # CJK COMPATIBILITY IDEOGRAPH-2F875 +2F876 >3781 # CJK COMPATIBILITY IDEOGRAPH-2F876 +2F877 >5C60 # CJK COMPATIBILITY IDEOGRAPH-2F877 +2F878 >5C6E # CJK COMPATIBILITY IDEOGRAPH-2F878 +2F879 >5CC0 # CJK COMPATIBILITY IDEOGRAPH-2F879 +2F87A >5C8D # CJK COMPATIBILITY IDEOGRAPH-2F87A +2F87B >21DE4 # CJK COMPATIBILITY IDEOGRAPH-2F87B +2F87C >5D43 # CJK COMPATIBILITY IDEOGRAPH-2F87C +2F87D >21DE6 # CJK COMPATIBILITY IDEOGRAPH-2F87D +2F87E >5D6E # CJK COMPATIBILITY IDEOGRAPH-2F87E +2F87F >5D6B # CJK COMPATIBILITY IDEOGRAPH-2F87F +2F880 >5D7C # CJK COMPATIBILITY IDEOGRAPH-2F880 +2F881 >5DE1 # CJK COMPATIBILITY IDEOGRAPH-2F881 +2F882 >5DE2 # CJK COMPATIBILITY IDEOGRAPH-2F882 +2F883 >382F # CJK COMPATIBILITY IDEOGRAPH-2F883 +2F884 >5DFD # CJK COMPATIBILITY IDEOGRAPH-2F884 +2F885 >5E28 # CJK COMPATIBILITY IDEOGRAPH-2F885 +2F886 >5E3D # CJK COMPATIBILITY IDEOGRAPH-2F886 +2F887 >5E69 # CJK COMPATIBILITY IDEOGRAPH-2F887 +2F888 >3862 # CJK COMPATIBILITY IDEOGRAPH-2F888 +2F889 >22183 # CJK COMPATIBILITY IDEOGRAPH-2F889 +2F88A >387C # CJK COMPATIBILITY IDEOGRAPH-2F88A +2F88B >5EB0 # CJK COMPATIBILITY IDEOGRAPH-2F88B +2F88C >5EB3 # CJK COMPATIBILITY IDEOGRAPH-2F88C +2F88D >5EB6 # CJK COMPATIBILITY IDEOGRAPH-2F88D +2F88E >5ECA # CJK COMPATIBILITY IDEOGRAPH-2F88E +2F88F >2A392 # CJK COMPATIBILITY IDEOGRAPH-2F88F +2F890 >5EFE # CJK COMPATIBILITY IDEOGRAPH-2F890 +2F891..2F892 >22331 # CJK COMPATIBILITY IDEOGRAPH-2F891..CJK COMPATIBILITY IDEOGRAPH-2F892 +2F893 >8201 # CJK COMPATIBILITY IDEOGRAPH-2F893 +2F894..2F895 >5F22 # CJK COMPATIBILITY IDEOGRAPH-2F894..CJK COMPATIBILITY IDEOGRAPH-2F895 +2F896 >38C7 # CJK COMPATIBILITY IDEOGRAPH-2F896 +2F897 >232B8 # CJK COMPATIBILITY IDEOGRAPH-2F897 +2F898 >261DA # CJK COMPATIBILITY IDEOGRAPH-2F898 +2F899 >5F62 # CJK COMPATIBILITY IDEOGRAPH-2F899 +2F89A >5F6B # CJK COMPATIBILITY IDEOGRAPH-2F89A +2F89B >38E3 # CJK COMPATIBILITY IDEOGRAPH-2F89B +2F89C >5F9A # CJK COMPATIBILITY IDEOGRAPH-2F89C +2F89D >5FCD # CJK COMPATIBILITY IDEOGRAPH-2F89D +2F89E >5FD7 # CJK COMPATIBILITY IDEOGRAPH-2F89E +2F89F >5FF9 # CJK COMPATIBILITY IDEOGRAPH-2F89F +2F8A0 >6081 # CJK COMPATIBILITY IDEOGRAPH-2F8A0 +2F8A1 >393A # CJK COMPATIBILITY IDEOGRAPH-2F8A1 +2F8A2 >391C # CJK COMPATIBILITY IDEOGRAPH-2F8A2 +2F8A3 >6094 # CJK COMPATIBILITY IDEOGRAPH-2F8A3 +2F8A4 >226D4 # CJK COMPATIBILITY IDEOGRAPH-2F8A4 +2F8A5 >60C7 # CJK COMPATIBILITY IDEOGRAPH-2F8A5 +2F8A6 >6148 # CJK COMPATIBILITY IDEOGRAPH-2F8A6 +2F8A7 >614C # CJK COMPATIBILITY IDEOGRAPH-2F8A7 +2F8A8 >614E # CJK COMPATIBILITY IDEOGRAPH-2F8A8 +2F8A9 >614C # CJK COMPATIBILITY IDEOGRAPH-2F8A9 +2F8AA >617A # CJK COMPATIBILITY IDEOGRAPH-2F8AA +2F8AB >618E # CJK COMPATIBILITY IDEOGRAPH-2F8AB +2F8AC >61B2 # CJK COMPATIBILITY IDEOGRAPH-2F8AC +2F8AD >61A4 # CJK COMPATIBILITY IDEOGRAPH-2F8AD +2F8AE >61AF # CJK COMPATIBILITY IDEOGRAPH-2F8AE +2F8AF >61DE # CJK COMPATIBILITY IDEOGRAPH-2F8AF +2F8B0 >61F2 # CJK COMPATIBILITY IDEOGRAPH-2F8B0 +2F8B1 >61F6 # CJK COMPATIBILITY IDEOGRAPH-2F8B1 +2F8B2 >6210 # CJK COMPATIBILITY IDEOGRAPH-2F8B2 +2F8B3 >621B # CJK COMPATIBILITY IDEOGRAPH-2F8B3 +2F8B4 >625D # CJK COMPATIBILITY IDEOGRAPH-2F8B4 +2F8B5 >62B1 # CJK COMPATIBILITY IDEOGRAPH-2F8B5 +2F8B6 >62D4 # CJK COMPATIBILITY IDEOGRAPH-2F8B6 +2F8B7 >6350 # CJK COMPATIBILITY IDEOGRAPH-2F8B7 +2F8B8 >22B0C # CJK COMPATIBILITY IDEOGRAPH-2F8B8 +2F8B9 >633D # CJK COMPATIBILITY IDEOGRAPH-2F8B9 +2F8BA >62FC # CJK COMPATIBILITY IDEOGRAPH-2F8BA +2F8BB >6368 # CJK COMPATIBILITY IDEOGRAPH-2F8BB +2F8BC >6383 # CJK COMPATIBILITY IDEOGRAPH-2F8BC +2F8BD >63E4 # CJK COMPATIBILITY IDEOGRAPH-2F8BD +2F8BE >22BF1 # CJK COMPATIBILITY IDEOGRAPH-2F8BE +2F8BF >6422 # CJK COMPATIBILITY IDEOGRAPH-2F8BF +2F8C0 >63C5 # CJK COMPATIBILITY IDEOGRAPH-2F8C0 +2F8C1 >63A9 # CJK COMPATIBILITY IDEOGRAPH-2F8C1 +2F8C2 >3A2E # CJK COMPATIBILITY IDEOGRAPH-2F8C2 +2F8C3 >6469 # CJK COMPATIBILITY IDEOGRAPH-2F8C3 +2F8C4 >647E # CJK COMPATIBILITY IDEOGRAPH-2F8C4 +2F8C5 >649D # CJK COMPATIBILITY IDEOGRAPH-2F8C5 +2F8C6 >6477 # CJK COMPATIBILITY IDEOGRAPH-2F8C6 +2F8C7 >3A6C # CJK COMPATIBILITY IDEOGRAPH-2F8C7 +2F8C8 >654F # CJK COMPATIBILITY IDEOGRAPH-2F8C8 +2F8C9 >656C # CJK COMPATIBILITY IDEOGRAPH-2F8C9 +2F8CA >2300A # CJK COMPATIBILITY IDEOGRAPH-2F8CA +2F8CB >65E3 # CJK COMPATIBILITY IDEOGRAPH-2F8CB +2F8CC >66F8 # CJK COMPATIBILITY IDEOGRAPH-2F8CC +2F8CD >6649 # CJK COMPATIBILITY IDEOGRAPH-2F8CD +2F8CE >3B19 # CJK COMPATIBILITY IDEOGRAPH-2F8CE +2F8CF >6691 # CJK COMPATIBILITY IDEOGRAPH-2F8CF +2F8D0 >3B08 # CJK COMPATIBILITY IDEOGRAPH-2F8D0 +2F8D1 >3AE4 # CJK COMPATIBILITY IDEOGRAPH-2F8D1 +2F8D2 >5192 # CJK COMPATIBILITY IDEOGRAPH-2F8D2 +2F8D3 >5195 # CJK COMPATIBILITY IDEOGRAPH-2F8D3 +2F8D4 >6700 # CJK COMPATIBILITY IDEOGRAPH-2F8D4 +2F8D5 >669C # CJK COMPATIBILITY IDEOGRAPH-2F8D5 +2F8D6 >80AD # CJK COMPATIBILITY IDEOGRAPH-2F8D6 +2F8D7 >43D9 # CJK COMPATIBILITY IDEOGRAPH-2F8D7 +2F8D8 >6717 # CJK COMPATIBILITY IDEOGRAPH-2F8D8 +2F8D9 >671B # CJK COMPATIBILITY IDEOGRAPH-2F8D9 +2F8DA >6721 # CJK COMPATIBILITY IDEOGRAPH-2F8DA +2F8DB >675E # CJK COMPATIBILITY IDEOGRAPH-2F8DB +2F8DC >6753 # CJK COMPATIBILITY IDEOGRAPH-2F8DC +2F8DD >233C3 # CJK COMPATIBILITY IDEOGRAPH-2F8DD +2F8DE >3B49 # CJK COMPATIBILITY IDEOGRAPH-2F8DE +2F8DF >67FA # CJK COMPATIBILITY IDEOGRAPH-2F8DF +2F8E0 >6785 # CJK COMPATIBILITY IDEOGRAPH-2F8E0 +2F8E1 >6852 # CJK COMPATIBILITY IDEOGRAPH-2F8E1 +2F8E2 >6885 # CJK COMPATIBILITY IDEOGRAPH-2F8E2 +2F8E3 >2346D # CJK COMPATIBILITY IDEOGRAPH-2F8E3 +2F8E4 >688E # CJK COMPATIBILITY IDEOGRAPH-2F8E4 +2F8E5 >681F # CJK COMPATIBILITY IDEOGRAPH-2F8E5 +2F8E6 >6914 # CJK COMPATIBILITY IDEOGRAPH-2F8E6 +2F8E7 >3B9D # CJK COMPATIBILITY IDEOGRAPH-2F8E7 +2F8E8 >6942 # CJK COMPATIBILITY IDEOGRAPH-2F8E8 +2F8E9 >69A3 # CJK COMPATIBILITY IDEOGRAPH-2F8E9 +2F8EA >69EA # CJK COMPATIBILITY IDEOGRAPH-2F8EA +2F8EB >6AA8 # CJK COMPATIBILITY IDEOGRAPH-2F8EB +2F8EC >236A3 # CJK COMPATIBILITY IDEOGRAPH-2F8EC +2F8ED >6ADB # CJK COMPATIBILITY IDEOGRAPH-2F8ED +2F8EE >3C18 # CJK COMPATIBILITY IDEOGRAPH-2F8EE +2F8EF >6B21 # CJK COMPATIBILITY IDEOGRAPH-2F8EF +2F8F0 >238A7 # CJK COMPATIBILITY IDEOGRAPH-2F8F0 +2F8F1 >6B54 # CJK COMPATIBILITY IDEOGRAPH-2F8F1 +2F8F2 >3C4E # CJK COMPATIBILITY IDEOGRAPH-2F8F2 +2F8F3 >6B72 # CJK COMPATIBILITY IDEOGRAPH-2F8F3 +2F8F4 >6B9F # CJK COMPATIBILITY IDEOGRAPH-2F8F4 +2F8F5 >6BBA # CJK COMPATIBILITY IDEOGRAPH-2F8F5 +2F8F6 >6BBB # CJK COMPATIBILITY IDEOGRAPH-2F8F6 +2F8F7 >23A8D # CJK COMPATIBILITY IDEOGRAPH-2F8F7 +2F8F8 >21D0B # CJK COMPATIBILITY IDEOGRAPH-2F8F8 +2F8F9 >23AFA # CJK COMPATIBILITY IDEOGRAPH-2F8F9 +2F8FA >6C4E # CJK COMPATIBILITY IDEOGRAPH-2F8FA +2F8FB >23CBC # CJK COMPATIBILITY IDEOGRAPH-2F8FB +2F8FC >6CBF # CJK COMPATIBILITY IDEOGRAPH-2F8FC +2F8FD >6CCD # CJK COMPATIBILITY IDEOGRAPH-2F8FD +2F8FE >6C67 # CJK COMPATIBILITY IDEOGRAPH-2F8FE +2F8FF >6D16 # CJK COMPATIBILITY IDEOGRAPH-2F8FF +2F900 >6D3E # CJK COMPATIBILITY IDEOGRAPH-2F900 +2F901 >6D77 # CJK COMPATIBILITY IDEOGRAPH-2F901 +2F902 >6D41 # CJK COMPATIBILITY IDEOGRAPH-2F902 +2F903 >6D69 # CJK COMPATIBILITY IDEOGRAPH-2F903 +2F904 >6D78 # CJK COMPATIBILITY IDEOGRAPH-2F904 +2F905 >6D85 # CJK COMPATIBILITY IDEOGRAPH-2F905 +2F906 >23D1E # CJK COMPATIBILITY IDEOGRAPH-2F906 +2F907 >6D34 # CJK COMPATIBILITY IDEOGRAPH-2F907 +2F908 >6E2F # CJK COMPATIBILITY IDEOGRAPH-2F908 +2F909 >6E6E # CJK COMPATIBILITY IDEOGRAPH-2F909 +2F90A >3D33 # CJK COMPATIBILITY IDEOGRAPH-2F90A +2F90B >6ECB # CJK COMPATIBILITY IDEOGRAPH-2F90B +2F90C >6EC7 # CJK COMPATIBILITY IDEOGRAPH-2F90C +2F90D >23ED1 # CJK COMPATIBILITY IDEOGRAPH-2F90D +2F90E >6DF9 # CJK COMPATIBILITY IDEOGRAPH-2F90E +2F90F >6F6E # CJK COMPATIBILITY IDEOGRAPH-2F90F +2F910 >23F5E # CJK COMPATIBILITY IDEOGRAPH-2F910 +2F911 >23F8E # CJK COMPATIBILITY IDEOGRAPH-2F911 +2F912 >6FC6 # CJK COMPATIBILITY IDEOGRAPH-2F912 +2F913 >7039 # CJK COMPATIBILITY IDEOGRAPH-2F913 +2F914 >701E # CJK COMPATIBILITY IDEOGRAPH-2F914 +2F915 >701B # CJK COMPATIBILITY IDEOGRAPH-2F915 +2F916 >3D96 # CJK COMPATIBILITY IDEOGRAPH-2F916 +2F917 >704A # CJK COMPATIBILITY IDEOGRAPH-2F917 +2F918 >707D # CJK COMPATIBILITY IDEOGRAPH-2F918 +2F919 >7077 # CJK COMPATIBILITY IDEOGRAPH-2F919 +2F91A >70AD # CJK COMPATIBILITY IDEOGRAPH-2F91A +2F91B >20525 # CJK COMPATIBILITY IDEOGRAPH-2F91B +2F91C >7145 # CJK COMPATIBILITY IDEOGRAPH-2F91C +2F91D >24263 # CJK COMPATIBILITY IDEOGRAPH-2F91D +2F91E >719C # CJK COMPATIBILITY IDEOGRAPH-2F91E +2F91F >FFFD # CJK COMPATIBILITY IDEOGRAPH-2F91F +2F920 >7228 # CJK COMPATIBILITY IDEOGRAPH-2F920 +2F921 >7235 # CJK COMPATIBILITY IDEOGRAPH-2F921 +2F922 >7250 # CJK COMPATIBILITY IDEOGRAPH-2F922 +2F923 >24608 # CJK COMPATIBILITY IDEOGRAPH-2F923 +2F924 >7280 # CJK COMPATIBILITY IDEOGRAPH-2F924 +2F925 >7295 # CJK COMPATIBILITY IDEOGRAPH-2F925 +2F926 >24735 # CJK COMPATIBILITY IDEOGRAPH-2F926 +2F927 >24814 # CJK COMPATIBILITY IDEOGRAPH-2F927 +2F928 >737A # CJK COMPATIBILITY IDEOGRAPH-2F928 +2F929 >738B # CJK COMPATIBILITY IDEOGRAPH-2F929 +2F92A >3EAC # CJK COMPATIBILITY IDEOGRAPH-2F92A +2F92B >73A5 # CJK COMPATIBILITY IDEOGRAPH-2F92B +2F92C..2F92D >3EB8 # CJK COMPATIBILITY IDEOGRAPH-2F92C..CJK COMPATIBILITY IDEOGRAPH-2F92D +2F92E >7447 # CJK COMPATIBILITY IDEOGRAPH-2F92E +2F92F >745C # CJK COMPATIBILITY IDEOGRAPH-2F92F +2F930 >7471 # CJK COMPATIBILITY IDEOGRAPH-2F930 +2F931 >7485 # CJK COMPATIBILITY IDEOGRAPH-2F931 +2F932 >74CA # CJK COMPATIBILITY IDEOGRAPH-2F932 +2F933 >3F1B # CJK COMPATIBILITY IDEOGRAPH-2F933 +2F934 >7524 # CJK COMPATIBILITY IDEOGRAPH-2F934 +2F935 >24C36 # CJK COMPATIBILITY IDEOGRAPH-2F935 +2F936 >753E # CJK COMPATIBILITY IDEOGRAPH-2F936 +2F937 >24C92 # CJK COMPATIBILITY IDEOGRAPH-2F937 +2F938 >7570 # CJK COMPATIBILITY IDEOGRAPH-2F938 +2F939 >2219F # CJK COMPATIBILITY IDEOGRAPH-2F939 +2F93A >7610 # CJK COMPATIBILITY IDEOGRAPH-2F93A +2F93B >24FA1 # CJK COMPATIBILITY IDEOGRAPH-2F93B +2F93C >24FB8 # CJK COMPATIBILITY IDEOGRAPH-2F93C +2F93D >25044 # CJK COMPATIBILITY IDEOGRAPH-2F93D +2F93E >3FFC # CJK COMPATIBILITY IDEOGRAPH-2F93E +2F93F >4008 # CJK COMPATIBILITY IDEOGRAPH-2F93F +2F940 >76F4 # CJK COMPATIBILITY IDEOGRAPH-2F940 +2F941 >250F3 # CJK COMPATIBILITY IDEOGRAPH-2F941 +2F942 >250F2 # CJK COMPATIBILITY IDEOGRAPH-2F942 +2F943 >25119 # CJK COMPATIBILITY IDEOGRAPH-2F943 +2F944 >25133 # CJK COMPATIBILITY IDEOGRAPH-2F944 +2F945 >771E # CJK COMPATIBILITY IDEOGRAPH-2F945 +2F946..2F947 >771F # CJK COMPATIBILITY IDEOGRAPH-2F946..CJK COMPATIBILITY IDEOGRAPH-2F947 +2F948 >774A # CJK COMPATIBILITY IDEOGRAPH-2F948 +2F949 >4039 # CJK COMPATIBILITY IDEOGRAPH-2F949 +2F94A >778B # CJK COMPATIBILITY IDEOGRAPH-2F94A +2F94B >4046 # CJK COMPATIBILITY IDEOGRAPH-2F94B +2F94C >4096 # CJK COMPATIBILITY IDEOGRAPH-2F94C +2F94D >2541D # CJK COMPATIBILITY IDEOGRAPH-2F94D +2F94E >784E # CJK COMPATIBILITY IDEOGRAPH-2F94E +2F94F >788C # CJK COMPATIBILITY IDEOGRAPH-2F94F +2F950 >78CC # CJK COMPATIBILITY IDEOGRAPH-2F950 +2F951 >40E3 # CJK COMPATIBILITY IDEOGRAPH-2F951 +2F952 >25626 # CJK COMPATIBILITY IDEOGRAPH-2F952 +2F953 >7956 # CJK COMPATIBILITY IDEOGRAPH-2F953 +2F954 >2569A # CJK COMPATIBILITY IDEOGRAPH-2F954 +2F955 >256C5 # CJK COMPATIBILITY IDEOGRAPH-2F955 +2F956 >798F # CJK COMPATIBILITY IDEOGRAPH-2F956 +2F957 >79EB # CJK COMPATIBILITY IDEOGRAPH-2F957 +2F958 >412F # CJK COMPATIBILITY IDEOGRAPH-2F958 +2F959 >7A40 # CJK COMPATIBILITY IDEOGRAPH-2F959 +2F95A >7A4A # CJK COMPATIBILITY IDEOGRAPH-2F95A +2F95B >7A4F # CJK COMPATIBILITY IDEOGRAPH-2F95B +2F95C >2597C # CJK COMPATIBILITY IDEOGRAPH-2F95C +2F95D..2F95E >25AA7 # CJK COMPATIBILITY IDEOGRAPH-2F95D..CJK COMPATIBILITY IDEOGRAPH-2F95E +2F95F >FFFD # CJK COMPATIBILITY IDEOGRAPH-2F95F +2F960 >4202 # CJK COMPATIBILITY IDEOGRAPH-2F960 +2F961 >25BAB # CJK COMPATIBILITY IDEOGRAPH-2F961 +2F962 >7BC6 # CJK COMPATIBILITY IDEOGRAPH-2F962 +2F963 >7BC9 # CJK COMPATIBILITY IDEOGRAPH-2F963 +2F964 >4227 # CJK COMPATIBILITY IDEOGRAPH-2F964 +2F965 >25C80 # CJK COMPATIBILITY IDEOGRAPH-2F965 +2F966 >7CD2 # CJK COMPATIBILITY IDEOGRAPH-2F966 +2F967 >42A0 # CJK COMPATIBILITY IDEOGRAPH-2F967 +2F968 >7CE8 # CJK COMPATIBILITY IDEOGRAPH-2F968 +2F969 >7CE3 # CJK COMPATIBILITY IDEOGRAPH-2F969 +2F96A >7D00 # CJK COMPATIBILITY IDEOGRAPH-2F96A +2F96B >25F86 # CJK COMPATIBILITY IDEOGRAPH-2F96B +2F96C >7D63 # CJK COMPATIBILITY IDEOGRAPH-2F96C +2F96D >4301 # CJK COMPATIBILITY IDEOGRAPH-2F96D +2F96E >7DC7 # CJK COMPATIBILITY IDEOGRAPH-2F96E +2F96F >7E02 # CJK COMPATIBILITY IDEOGRAPH-2F96F +2F970 >7E45 # CJK COMPATIBILITY IDEOGRAPH-2F970 +2F971 >4334 # CJK COMPATIBILITY IDEOGRAPH-2F971 +2F972 >26228 # CJK COMPATIBILITY IDEOGRAPH-2F972 +2F973 >26247 # CJK COMPATIBILITY IDEOGRAPH-2F973 +2F974 >4359 # CJK COMPATIBILITY IDEOGRAPH-2F974 +2F975 >262D9 # CJK COMPATIBILITY IDEOGRAPH-2F975 +2F976 >7F7A # CJK COMPATIBILITY IDEOGRAPH-2F976 +2F977 >2633E # CJK COMPATIBILITY IDEOGRAPH-2F977 +2F978 >7F95 # CJK COMPATIBILITY IDEOGRAPH-2F978 +2F979 >7FFA # CJK COMPATIBILITY IDEOGRAPH-2F979 +2F97A >8005 # CJK COMPATIBILITY IDEOGRAPH-2F97A +2F97B >264DA # CJK COMPATIBILITY IDEOGRAPH-2F97B +2F97C >26523 # CJK COMPATIBILITY IDEOGRAPH-2F97C +2F97D >8060 # CJK COMPATIBILITY IDEOGRAPH-2F97D +2F97E >265A8 # CJK COMPATIBILITY IDEOGRAPH-2F97E +2F97F >8070 # CJK COMPATIBILITY IDEOGRAPH-2F97F +2F980 >2335F # CJK COMPATIBILITY IDEOGRAPH-2F980 +2F981 >43D5 # CJK COMPATIBILITY IDEOGRAPH-2F981 +2F982 >80B2 # CJK COMPATIBILITY IDEOGRAPH-2F982 +2F983 >8103 # CJK COMPATIBILITY IDEOGRAPH-2F983 +2F984 >440B # CJK COMPATIBILITY IDEOGRAPH-2F984 +2F985 >813E # CJK COMPATIBILITY IDEOGRAPH-2F985 +2F986 >5AB5 # CJK COMPATIBILITY IDEOGRAPH-2F986 +2F987 >267A7 # CJK COMPATIBILITY IDEOGRAPH-2F987 +2F988 >267B5 # CJK COMPATIBILITY IDEOGRAPH-2F988 +2F989 >23393 # CJK COMPATIBILITY IDEOGRAPH-2F989 +2F98A >2339C # CJK COMPATIBILITY IDEOGRAPH-2F98A +2F98B >8201 # CJK COMPATIBILITY IDEOGRAPH-2F98B +2F98C >8204 # CJK COMPATIBILITY IDEOGRAPH-2F98C +2F98D >8F9E # CJK COMPATIBILITY IDEOGRAPH-2F98D +2F98E >446B # CJK COMPATIBILITY IDEOGRAPH-2F98E +2F98F >8291 # CJK COMPATIBILITY IDEOGRAPH-2F98F +2F990 >828B # CJK COMPATIBILITY IDEOGRAPH-2F990 +2F991 >829D # CJK COMPATIBILITY IDEOGRAPH-2F991 +2F992 >52B3 # CJK COMPATIBILITY IDEOGRAPH-2F992 +2F993 >82B1 # CJK COMPATIBILITY IDEOGRAPH-2F993 +2F994 >82B3 # CJK COMPATIBILITY IDEOGRAPH-2F994 +2F995 >82BD # CJK COMPATIBILITY IDEOGRAPH-2F995 +2F996 >82E6 # CJK COMPATIBILITY IDEOGRAPH-2F996 +2F997 >26B3C # CJK COMPATIBILITY IDEOGRAPH-2F997 +2F998 >82E5 # CJK COMPATIBILITY IDEOGRAPH-2F998 +2F999 >831D # CJK COMPATIBILITY IDEOGRAPH-2F999 +2F99A >8363 # CJK COMPATIBILITY IDEOGRAPH-2F99A +2F99B >83AD # CJK COMPATIBILITY IDEOGRAPH-2F99B +2F99C >8323 # CJK COMPATIBILITY IDEOGRAPH-2F99C +2F99D >83BD # CJK COMPATIBILITY IDEOGRAPH-2F99D +2F99E >83E7 # CJK COMPATIBILITY IDEOGRAPH-2F99E +2F99F >8457 # CJK COMPATIBILITY IDEOGRAPH-2F99F +2F9A0 >8353 # CJK COMPATIBILITY IDEOGRAPH-2F9A0 +2F9A1 >83CA # CJK COMPATIBILITY IDEOGRAPH-2F9A1 +2F9A2 >83CC # CJK COMPATIBILITY IDEOGRAPH-2F9A2 +2F9A3 >83DC # CJK COMPATIBILITY IDEOGRAPH-2F9A3 +2F9A4 >26C36 # CJK COMPATIBILITY IDEOGRAPH-2F9A4 +2F9A5 >26D6B # CJK COMPATIBILITY IDEOGRAPH-2F9A5 +2F9A6 >26CD5 # CJK COMPATIBILITY IDEOGRAPH-2F9A6 +2F9A7 >452B # CJK COMPATIBILITY IDEOGRAPH-2F9A7 +2F9A8 >84F1 # CJK COMPATIBILITY IDEOGRAPH-2F9A8 +2F9A9 >84F3 # CJK COMPATIBILITY IDEOGRAPH-2F9A9 +2F9AA >8516 # CJK COMPATIBILITY IDEOGRAPH-2F9AA +2F9AB >273CA # CJK COMPATIBILITY IDEOGRAPH-2F9AB +2F9AC >8564 # CJK COMPATIBILITY IDEOGRAPH-2F9AC +2F9AD >26F2C # CJK COMPATIBILITY IDEOGRAPH-2F9AD +2F9AE >455D # CJK COMPATIBILITY IDEOGRAPH-2F9AE +2F9AF >4561 # CJK COMPATIBILITY IDEOGRAPH-2F9AF +2F9B0 >26FB1 # CJK COMPATIBILITY IDEOGRAPH-2F9B0 +2F9B1 >270D2 # CJK COMPATIBILITY IDEOGRAPH-2F9B1 +2F9B2 >456B # CJK COMPATIBILITY IDEOGRAPH-2F9B2 +2F9B3 >8650 # CJK COMPATIBILITY IDEOGRAPH-2F9B3 +2F9B4 >865C # CJK COMPATIBILITY IDEOGRAPH-2F9B4 +2F9B5 >8667 # CJK COMPATIBILITY IDEOGRAPH-2F9B5 +2F9B6 >8669 # CJK COMPATIBILITY IDEOGRAPH-2F9B6 +2F9B7 >86A9 # CJK COMPATIBILITY IDEOGRAPH-2F9B7 +2F9B8 >8688 # CJK COMPATIBILITY IDEOGRAPH-2F9B8 +2F9B9 >870E # CJK COMPATIBILITY IDEOGRAPH-2F9B9 +2F9BA >86E2 # CJK COMPATIBILITY IDEOGRAPH-2F9BA +2F9BB >8779 # CJK COMPATIBILITY IDEOGRAPH-2F9BB +2F9BC >8728 # CJK COMPATIBILITY IDEOGRAPH-2F9BC +2F9BD >876B # CJK COMPATIBILITY IDEOGRAPH-2F9BD +2F9BE >8786 # CJK COMPATIBILITY IDEOGRAPH-2F9BE +2F9BF >FFFD # CJK COMPATIBILITY IDEOGRAPH-2F9BF +2F9C0 >87E1 # CJK COMPATIBILITY IDEOGRAPH-2F9C0 +2F9C1 >8801 # CJK COMPATIBILITY IDEOGRAPH-2F9C1 +2F9C2 >45F9 # CJK COMPATIBILITY IDEOGRAPH-2F9C2 +2F9C3 >8860 # CJK COMPATIBILITY IDEOGRAPH-2F9C3 +2F9C4 >8863 # CJK COMPATIBILITY IDEOGRAPH-2F9C4 +2F9C5 >27667 # CJK COMPATIBILITY IDEOGRAPH-2F9C5 +2F9C6 >88D7 # CJK COMPATIBILITY IDEOGRAPH-2F9C6 +2F9C7 >88DE # CJK COMPATIBILITY IDEOGRAPH-2F9C7 +2F9C8 >4635 # CJK COMPATIBILITY IDEOGRAPH-2F9C8 +2F9C9 >88FA # CJK COMPATIBILITY IDEOGRAPH-2F9C9 +2F9CA >34BB # CJK COMPATIBILITY IDEOGRAPH-2F9CA +2F9CB >278AE # CJK COMPATIBILITY IDEOGRAPH-2F9CB +2F9CC >27966 # CJK COMPATIBILITY IDEOGRAPH-2F9CC +2F9CD >46BE # CJK COMPATIBILITY IDEOGRAPH-2F9CD +2F9CE >46C7 # CJK COMPATIBILITY IDEOGRAPH-2F9CE +2F9CF >8AA0 # CJK COMPATIBILITY IDEOGRAPH-2F9CF +2F9D0 >8AED # CJK COMPATIBILITY IDEOGRAPH-2F9D0 +2F9D1 >8B8A # CJK COMPATIBILITY IDEOGRAPH-2F9D1 +2F9D2 >8C55 # CJK COMPATIBILITY IDEOGRAPH-2F9D2 +2F9D3 >27CA8 # CJK COMPATIBILITY IDEOGRAPH-2F9D3 +2F9D4 >8CAB # CJK COMPATIBILITY IDEOGRAPH-2F9D4 +2F9D5 >8CC1 # CJK COMPATIBILITY IDEOGRAPH-2F9D5 +2F9D6 >8D1B # CJK COMPATIBILITY IDEOGRAPH-2F9D6 +2F9D7 >8D77 # CJK COMPATIBILITY IDEOGRAPH-2F9D7 +2F9D8 >27F2F # CJK COMPATIBILITY IDEOGRAPH-2F9D8 +2F9D9 >20804 # CJK COMPATIBILITY IDEOGRAPH-2F9D9 +2F9DA >8DCB # CJK COMPATIBILITY IDEOGRAPH-2F9DA +2F9DB >8DBC # CJK COMPATIBILITY IDEOGRAPH-2F9DB +2F9DC >8DF0 # CJK COMPATIBILITY IDEOGRAPH-2F9DC +2F9DD >208DE # CJK COMPATIBILITY IDEOGRAPH-2F9DD +2F9DE >8ED4 # CJK COMPATIBILITY IDEOGRAPH-2F9DE +2F9DF >8F38 # CJK COMPATIBILITY IDEOGRAPH-2F9DF +2F9E0 >285D2 # CJK COMPATIBILITY IDEOGRAPH-2F9E0 +2F9E1 >285ED # CJK COMPATIBILITY IDEOGRAPH-2F9E1 +2F9E2 >9094 # CJK COMPATIBILITY IDEOGRAPH-2F9E2 +2F9E3 >90F1 # CJK COMPATIBILITY IDEOGRAPH-2F9E3 +2F9E4 >9111 # CJK COMPATIBILITY IDEOGRAPH-2F9E4 +2F9E5 >2872E # CJK COMPATIBILITY IDEOGRAPH-2F9E5 +2F9E6 >911B # CJK COMPATIBILITY IDEOGRAPH-2F9E6 +2F9E7 >9238 # CJK COMPATIBILITY IDEOGRAPH-2F9E7 +2F9E8 >92D7 # CJK COMPATIBILITY IDEOGRAPH-2F9E8 +2F9E9 >92D8 # CJK COMPATIBILITY IDEOGRAPH-2F9E9 +2F9EA >927C # CJK COMPATIBILITY IDEOGRAPH-2F9EA +2F9EB >93F9 # CJK COMPATIBILITY IDEOGRAPH-2F9EB +2F9EC >9415 # CJK COMPATIBILITY IDEOGRAPH-2F9EC +2F9ED >28BFA # CJK COMPATIBILITY IDEOGRAPH-2F9ED +2F9EE >958B # CJK COMPATIBILITY IDEOGRAPH-2F9EE +2F9EF >4995 # CJK COMPATIBILITY IDEOGRAPH-2F9EF +2F9F0 >95B7 # CJK COMPATIBILITY IDEOGRAPH-2F9F0 +2F9F1 >28D77 # CJK COMPATIBILITY IDEOGRAPH-2F9F1 +2F9F2 >49E6 # CJK COMPATIBILITY IDEOGRAPH-2F9F2 +2F9F3 >96C3 # CJK COMPATIBILITY IDEOGRAPH-2F9F3 +2F9F4 >5DB2 # CJK COMPATIBILITY IDEOGRAPH-2F9F4 +2F9F5 >9723 # CJK COMPATIBILITY IDEOGRAPH-2F9F5 +2F9F6 >29145 # CJK COMPATIBILITY IDEOGRAPH-2F9F6 +2F9F7 >2921A # CJK COMPATIBILITY IDEOGRAPH-2F9F7 +2F9F8 >4A6E # CJK COMPATIBILITY IDEOGRAPH-2F9F8 +2F9F9 >4A76 # CJK COMPATIBILITY IDEOGRAPH-2F9F9 +2F9FA >97E0 # CJK COMPATIBILITY IDEOGRAPH-2F9FA +2F9FB >2940A # CJK COMPATIBILITY IDEOGRAPH-2F9FB +2F9FC >4AB2 # CJK COMPATIBILITY IDEOGRAPH-2F9FC +2F9FD >29496 # CJK COMPATIBILITY IDEOGRAPH-2F9FD +2F9FE..2F9FF >980B # CJK COMPATIBILITY IDEOGRAPH-2F9FE..CJK COMPATIBILITY IDEOGRAPH-2F9FF +2FA00 >9829 # CJK COMPATIBILITY IDEOGRAPH-2FA00 +2FA01 >295B6 # CJK COMPATIBILITY IDEOGRAPH-2FA01 +2FA02 >98E2 # CJK COMPATIBILITY IDEOGRAPH-2FA02 +2FA03 >4B33 # CJK COMPATIBILITY IDEOGRAPH-2FA03 +2FA04 >9929 # CJK COMPATIBILITY IDEOGRAPH-2FA04 +2FA05 >99A7 # CJK COMPATIBILITY IDEOGRAPH-2FA05 +2FA06 >99C2 # CJK COMPATIBILITY IDEOGRAPH-2FA06 +2FA07 >99FE # CJK COMPATIBILITY IDEOGRAPH-2FA07 +2FA08 >4BCE # CJK COMPATIBILITY IDEOGRAPH-2FA08 +2FA09 >29B30 # CJK COMPATIBILITY IDEOGRAPH-2FA09 +2FA0A >9B12 # CJK COMPATIBILITY IDEOGRAPH-2FA0A +2FA0B >9C40 # CJK COMPATIBILITY IDEOGRAPH-2FA0B +2FA0C >9CFD # CJK COMPATIBILITY IDEOGRAPH-2FA0C +2FA0D >4CCE # CJK COMPATIBILITY IDEOGRAPH-2FA0D +2FA0E >4CED # CJK COMPATIBILITY IDEOGRAPH-2FA0E +2FA0F >9D67 # CJK COMPATIBILITY IDEOGRAPH-2FA0F +2FA10 >2A0CE # CJK COMPATIBILITY IDEOGRAPH-2FA10 +2FA11 >4CF8 # CJK COMPATIBILITY IDEOGRAPH-2FA11 +2FA12 >2A105 # CJK COMPATIBILITY IDEOGRAPH-2FA12 +2FA13 >2A20E # CJK COMPATIBILITY IDEOGRAPH-2FA13 +2FA14 >2A291 # CJK COMPATIBILITY IDEOGRAPH-2FA14 +2FA15 >9EBB # CJK COMPATIBILITY IDEOGRAPH-2FA15 +2FA16 >4D56 # CJK COMPATIBILITY IDEOGRAPH-2FA16 +2FA17 >9EF9 # CJK COMPATIBILITY IDEOGRAPH-2FA17 +2FA18 >9EFE # CJK COMPATIBILITY IDEOGRAPH-2FA18 +2FA19 >9F05 # CJK COMPATIBILITY IDEOGRAPH-2FA19 +2FA1A >9F0F # CJK COMPATIBILITY IDEOGRAPH-2FA1A +2FA1B >9F16 # CJK COMPATIBILITY IDEOGRAPH-2FA1B +2FA1C >9F3B # CJK COMPATIBILITY IDEOGRAPH-2FA1C +2FA1D >2A600 # CJK COMPATIBILITY IDEOGRAPH-2FA1D +2FA1E..E0000 >FFFD # .. +E0001 >FFFD # LANGUAGE TAG +E0002..E001F >FFFD # .. +E0020..E007F >FFFD # TAG SPACE..CANCEL TAG +E0080..E00FF >FFFD # .. +E0100..E01EF > # VARIATION SELECTOR-17..VARIATION SELECTOR-256 +E01F0..EFFFF >FFFD # .. +F0000..FFFFD >FFFD # .. +FFFFE..FFFFF >FFFD # .. +100000..10FFFD>FFFD # .. +10FFFE..10FFFF>FFFD # .. + +# Total code points: 1114112 + diff --git a/icu4c/source/test/cintltst/idnatest.c b/icu4c/source/test/cintltst/idnatest.c index 6109515f9e..5f5f38ec38 100644 --- a/icu4c/source/test/cintltst/idnatest.c +++ b/icu4c/source/test/cintltst/idnatest.c @@ -1,7 +1,7 @@ /* ******************************************************************************* * - * Copyright (C) 2003-2009, International Business Machines + * Copyright (C) 2003-2010, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -37,6 +37,8 @@ static void TestJB4490(void); static void TestJB4475(void); static void TestLength(void); static void TestJB5273(void); +static void TestUTS46(void); + void addIDNATest(TestNode** root); @@ -64,6 +66,7 @@ addIDNATest(TestNode** root) addTest(root, &TestJB4475, "idna/TestJB4475"); addTest(root, &TestLength, "idna/TestLength"); addTest(root, &TestJB5273, "idna/TestJB5273"); + addTest(root, &TestUTS46, "idna/TestUTS46"); } static void @@ -847,6 +850,177 @@ static void TestJB5273(){ log_err_status(status, "uidna_toUnicode failed with error: %s\n", u_errorName(status)); } } + +/* + * Test the new (ICU 4.6/2010) C API that was added for UTS #46. + * Just an API test: Functionality is tested via C++ intltest. + */ +static void TestUTS46() { + static const UChar fA_sharps16[] = { 0x66, 0x41, 0xdf, 0 }; + static const char fA_sharps8[] = { 0x66, 0x41, (char)0xc3, (char)0x9f, 0 }; + static const UChar fa_sharps16[] = { 0x66, 0x61, 0xdf, 0 }; + static const char fa_sharps8[] = { 0x66, 0x61, (char)0xc3, (char)0x9f, 0 }; + static const UChar fass16[] = { 0x66, 0x61, 0x73, 0x73, 0 }; + static const char fass8[] = { 0x66, 0x61, 0x73, 0x73, 0 }; + static const UChar fA_BEL[] = { 0x66, 0x41, 7, 0 }; + static const UChar fa_FFFD[] = { 0x66, 0x61, 0xfffd, 0 }; + + UChar dest16[10]; + char dest8[10]; + int32_t length; + + UIDNAInfo info = UIDNA_INFO_INITIALIZER; + UErrorCode errorCode = U_ZERO_ERROR; + UIDNA *uts46 = uidna_openUTS46(UIDNA_USE_STD3_RULES|UIDNA_NONTRANSITIONAL_TO_UNICODE, + &errorCode); + if(U_FAILURE(errorCode)) { + log_err_status(errorCode, "uidna_openUTS46() failed: %s\n", u_errorName(errorCode)); + return; + } + + /* These calls should succeed. */ + length = uidna_labelToASCII(uts46, fA_sharps16, -1, + dest16, LENGTHOF(dest16), &info, &errorCode); + if( U_FAILURE(errorCode) || length != 4 || 0 != u_memcmp(dest16, fass16, 5) || + !info.isTransitionalDifferent || info.errors != 0 + ) { + log_err("uidna_labelToASCII() failed: %s\n", u_errorName(errorCode)); + } + errorCode = U_ZERO_ERROR; + length = uidna_labelToUnicode(uts46, fA_sharps16, u_strlen(fA_sharps16), + dest16, LENGTHOF(dest16), &info, &errorCode); + if( U_FAILURE(errorCode) || length != 3 || 0 != u_memcmp(dest16, fa_sharps16, 4) || + !info.isTransitionalDifferent || info.errors != 0 + ) { + log_err("uidna_labelToUnicode() failed: %s\n", u_errorName(errorCode)); + } + errorCode = U_ZERO_ERROR; + length = uidna_nameToASCII(uts46, fA_sharps16, u_strlen(fA_sharps16), + dest16, 4, &info, &errorCode); + if( errorCode != U_STRING_NOT_TERMINATED_WARNING || + length != 4 || 0 != u_memcmp(dest16, fass16, 4) || + !info.isTransitionalDifferent || info.errors != 0 + ) { + log_err("uidna_nameToASCII() failed: %s\n", u_errorName(errorCode)); + } + errorCode = U_ZERO_ERROR; + length = uidna_nameToUnicode(uts46, fA_sharps16, -1, + dest16, 3, &info, &errorCode); + if( errorCode != U_STRING_NOT_TERMINATED_WARNING || + length != 3 || 0 != u_memcmp(dest16, fa_sharps16, 3) || + !info.isTransitionalDifferent || info.errors != 0 + ) { + log_err("uidna_nameToUnicode() failed: %s\n", u_errorName(errorCode)); + } + + errorCode = U_ZERO_ERROR; + length = uidna_labelToASCII_UTF8(uts46, fA_sharps8, -1, + dest8, LENGTHOF(dest8), &info, &errorCode); + if( U_FAILURE(errorCode) || length != 4 || 0 != memcmp(dest8, fass8, 5) || + !info.isTransitionalDifferent || info.errors != 0 + ) { + log_err("uidna_labelToASCII_UTF8() failed: %s\n", u_errorName(errorCode)); + } + errorCode = U_ZERO_ERROR; + length = uidna_labelToUnicodeUTF8(uts46, fA_sharps8, strlen(fA_sharps8), + dest8, LENGTHOF(dest8), &info, &errorCode); + if( U_FAILURE(errorCode) || length != 4 || 0 != memcmp(dest8, fa_sharps8, 5) || + !info.isTransitionalDifferent || info.errors != 0 + ) { + log_err("uidna_labelToUnicodeUTF8() failed: %s\n", u_errorName(errorCode)); + } + errorCode = U_ZERO_ERROR; + length = uidna_nameToASCII_UTF8(uts46, fA_sharps8, strlen(fA_sharps8), + dest8, 4, &info, &errorCode); + if( errorCode != U_STRING_NOT_TERMINATED_WARNING || + length != 4 || 0 != memcmp(dest8, fass8, 4) || + !info.isTransitionalDifferent || info.errors != 0 + ) { + log_err("uidna_nameToASCII_UTF8() failed: %s\n", u_errorName(errorCode)); + } + errorCode = U_ZERO_ERROR; + length = uidna_nameToUnicodeUTF8(uts46, fA_sharps8, -1, + dest8, 4, &info, &errorCode); + if( errorCode != U_STRING_NOT_TERMINATED_WARNING || + length != 4 || 0 != memcmp(dest8, fa_sharps8, 4) || + !info.isTransitionalDifferent || info.errors != 0 + ) { + log_err("uidna_nameToUnicodeUTF8() failed: %s\n", u_errorName(errorCode)); + } + + errorCode = U_ZERO_ERROR; + length = uidna_nameToASCII(uts46, NULL, 0, + dest16, 0, &info, &errorCode); + if( errorCode != U_STRING_NOT_TERMINATED_WARNING || + length != 0 || + info.isTransitionalDifferent || info.errors != UIDNA_ERROR_EMPTY_LABEL + ) { + log_err("uidna_nameToASCII(empty) failed: %s\n", u_errorName(errorCode)); + } + errorCode = U_ZERO_ERROR; + length = uidna_nameToUnicode(uts46, fA_BEL, -1, + dest16, 3, &info, &errorCode); + if( errorCode != U_STRING_NOT_TERMINATED_WARNING || + length != 3 || 0 != u_memcmp(dest16, fa_FFFD, 3) || + info.isTransitionalDifferent || info.errors == 0 + ) { + log_err("uidna_nameToUnicode(fa) failed: %s\n", u_errorName(errorCode)); + } + + /* These calls should fail. */ + errorCode = U_USELESS_COLLATOR_ERROR; + length = uidna_labelToASCII(uts46, fA_sharps16, -1, + dest16, LENGTHOF(dest16), &info, &errorCode); + if(errorCode != U_USELESS_COLLATOR_ERROR) { + log_err("uidna_labelToASCII(failure) failed: %s\n", u_errorName(errorCode)); + } + errorCode = U_ZERO_ERROR; + length = uidna_labelToUnicode(uts46, fA_sharps16, u_strlen(fA_sharps16), + dest16, LENGTHOF(dest16), NULL, &errorCode); + if(errorCode != U_ILLEGAL_ARGUMENT_ERROR) { + log_err("uidna_labelToUnicode(UIDNAInfo=NULL) failed: %s\n", u_errorName(errorCode)); + } + errorCode = U_ZERO_ERROR; + length = uidna_nameToASCII(uts46, NULL, u_strlen(fA_sharps16), + dest16, 4, &info, &errorCode); + if(errorCode != U_ILLEGAL_ARGUMENT_ERROR) { + log_err("uidna_nameToASCII(src=NULL) failed: %s\n", u_errorName(errorCode)); + } + errorCode = U_ZERO_ERROR; + length = uidna_nameToUnicode(uts46, fA_sharps16, -2, + dest16, 3, &info, &errorCode); + if(errorCode != U_ILLEGAL_ARGUMENT_ERROR) { + log_err("uidna_nameToUnicode(length<-1) failed: %s\n", u_errorName(errorCode)); + } + + errorCode = U_ZERO_ERROR; + length = uidna_labelToASCII_UTF8(uts46, fA_sharps8, -1, + NULL, LENGTHOF(dest8), &info, &errorCode); + if(errorCode != U_ILLEGAL_ARGUMENT_ERROR) { + log_err("uidna_labelToASCII_UTF8(dest=NULL) failed: %s\n", u_errorName(errorCode)); + } + errorCode = U_ZERO_ERROR; + length = uidna_labelToUnicodeUTF8(uts46, fA_sharps8, strlen(fA_sharps8), + dest8, -1, &info, &errorCode); + if(errorCode != U_ILLEGAL_ARGUMENT_ERROR) { + log_err("uidna_labelToUnicodeUTF8(capacity<0) failed: %s\n", u_errorName(errorCode)); + } + errorCode = U_ZERO_ERROR; + length = uidna_nameToASCII_UTF8(uts46, dest8, strlen(fA_sharps8), + dest8, 4, &info, &errorCode); + if(errorCode != U_ILLEGAL_ARGUMENT_ERROR) { + log_err("uidna_nameToASCII_UTF8(src==dest!=NULL) failed: %s\n", u_errorName(errorCode)); + } + errorCode = U_ZERO_ERROR; + length = uidna_nameToUnicodeUTF8(uts46, fA_sharps8, -1, + dest8, 3, &info, &errorCode); + if(errorCode != U_BUFFER_OVERFLOW_ERROR || length != 4) { + log_err("uidna_nameToUnicodeUTF8() overflow failed: %s\n", u_errorName(errorCode)); + } + + uidna_close(uts46); +} + #endif /* @@ -857,4 +1031,3 @@ static void TestJB5273(){ * End: * */ - diff --git a/icu4c/source/test/intltest/Makefile.in b/icu4c/source/test/intltest/Makefile.in index f268a63186..bb7f4d27a1 100644 --- a/icu4c/source/test/intltest/Makefile.in +++ b/icu4c/source/test/intltest/Makefile.in @@ -54,8 +54,8 @@ itrbbi.o rbbiapts.o rbbitst.o ittrans.o transapi.o cpdtrtst.o \ testutil.o transrt.o trnserr.o normconf.o sfwdchit.o \ jamotest.o srchtest.o reptest.o regextst.o \ itrbnf.o itrbnfrt.o itrbnfp.o ucaconf.o icusvtst.o \ -uobjtest.o idnaref.o idnaconf.o nptrans.o punyref.o testidn.o testidna.o incaltst.o \ -calcasts.o v32test.o uvectest.o textfile.o tokiter.o utxttest.o \ +uobjtest.o idnaref.o idnaconf.o nptrans.o punyref.o testidn.o testidna.o uts46test.o \ +incaltst.o calcasts.o v32test.o uvectest.o textfile.o tokiter.o utxttest.o \ windttst.o winnmtst.o winutil.o csdetest.o tzrulets.o tzoffloc.o tzfmttst.o ssearch.o dtifmtts.o \ tufmtts.o itspoof.o simplethread.o bidiconf.o locnmtst.o dcfmtest.o diff --git a/icu4c/source/test/intltest/intltest.cpp b/icu4c/source/test/intltest/intltest.cpp index c52e370b63..c810061140 100644 --- a/icu4c/source/test/intltest/intltest.cpp +++ b/icu4c/source/test/intltest/intltest.cpp @@ -258,6 +258,10 @@ IntlTest::appendHex(uint32_t number, return target; } +static inline UBool isPrintable(UChar32 c) { + return c <= 0x7E && (c >= 0x20 || c == 9 || c == 0xA || c == 0xD); +} + // Replace nonprintable characters with unicode escapes UnicodeString& IntlTest::prettify(const UnicodeString &source, @@ -271,9 +275,9 @@ IntlTest::prettify(const UnicodeString &source, for (i = 0; i < source.length(); ) { UChar32 ch = source.char32At(i); - i += UTF_CHAR_LENGTH(ch); + i += U16_LENGTH(ch); - if (ch < 0x09 || (ch > 0x0A && ch < 0x20)|| ch > 0x7E) + if (!isPrintable(ch)) { if (ch <= 0xFFFF) { target += "\\u"; @@ -306,9 +310,9 @@ IntlTest::prettify(const UnicodeString &source, UBool parseBackslash) for (i = 0; i < source.length();) { UChar32 ch = source.char32At(i); - i += UTF_CHAR_LENGTH(ch); + i += U16_LENGTH(ch); - if (ch < 0x09 || (ch > 0x0A && ch < 0x20)|| ch > 0x7E) + if (!isPrintable(ch)) { if (parseBackslash) { // If we are preceded by an odd number of backslashes, @@ -1466,12 +1470,11 @@ const char * IntlTest::pathToDataDirectory() /* * This is a variant of cintltst/ccolltst.c:CharsToUChars(). - * It converts a character string into a UnicodeString, with + * It converts an invariant-character string into a UnicodeString, with * unescaping \u sequences. */ UnicodeString CharsToUnicodeString(const char* chars){ - UnicodeString str(chars, ""); // Invariant conversion - return str.unescape(); + return UnicodeString(chars, -1, US_INV).unescape(); } UnicodeString ctou(const char* chars) { diff --git a/icu4c/source/test/intltest/intltest.h b/icu4c/source/test/intltest/intltest.h index c860cdd8d5..ac0dbe3187 100644 --- a/icu4c/source/test/intltest/intltest.h +++ b/icu4c/source/test/intltest/intltest.h @@ -1,6 +1,6 @@ /******************************************************************** * COPYRIGHT: - * Copyright (c) 1997-2009, International Business Machines Corporation and + * Copyright (c) 1997-2010, International Business Machines Corporation and * others. All Rights Reserved. ********************************************************************/ @@ -67,6 +67,36 @@ UnicodeString toString(int32_t n); } \ break +// More convenient macros. These allow easy reordering of the test cases. +// +//| void MyTest::runIndexedTest(int32_t index, UBool exec, +//| const char* &name, char* /*par*/) { +//| TESTCASE_AUTO_BEGIN; +//| TESTCASE_AUTO(TestSomething); +//| TESTCASE_AUTO(TestSomethingElse); +//| TESTCASE_AUTO(TestAnotherThing); +//| TESTCASE_AUTO_END; +//| } +#define TESTCASE_AUTO_BEGIN \ + for(;;) { \ + int32_t testCaseAutoNumber = 0 + +#define TESTCASE_AUTO(test) \ + if (index == testCaseAutoNumber++) { \ + name = #test; \ + if (exec) { \ + logln(#test "---"); \ + logln(); \ + test(); \ + } \ + break; \ + } + +#define TESTCASE_AUTO_END \ + name = ""; \ + break; \ + } + class IntlTest : public TestLog { public: diff --git a/icu4c/source/test/intltest/intltest.vcproj b/icu4c/source/test/intltest/intltest.vcproj index 883beaf06c..1f7f775eb5 100644 --- a/icu4c/source/test/intltest/intltest.vcproj +++ b/icu4c/source/test/intltest/intltest.vcproj @@ -1286,6 +1286,10 @@ RelativePath=".\testidna.h" > + + #include #include +#include "unicode/localpointer.h" #include "unicode/ustring.h" #include "unicode/usprep.h" #include "unicode/uniset.h" @@ -1235,6 +1236,8 @@ void TestIDNA::testRootLabelSeparator(const char* testName, CompareFunc func, // runIndexedTest //--------------------------------------------- +extern IntlTest *createUTS46Test(); + void TestIDNA::runIndexedTest( int32_t index, UBool exec, const char* &name, char* par) { if (exec) logln((UnicodeString)"TestSuite IDNA API "); @@ -1266,6 +1269,14 @@ void TestIDNA::runIndexedTest( int32_t index, UBool exec, const char* &name, cha } break; } + case 13: + name = "UTS46Test"; + if (exec) { + logln("TestSuite UTS46Test---"); logln(); + LocalPointer test(createUTS46Test()); + callTest(*test, par); + } + break; default: name = ""; break; /*needed to end loop*/ } } diff --git a/icu4c/source/test/intltest/uobjtest.cpp b/icu4c/source/test/intltest/uobjtest.cpp index d0dc808526..fe88349874 100644 --- a/icu4c/source/test/intltest/uobjtest.cpp +++ b/icu4c/source/test/intltest/uobjtest.cpp @@ -263,6 +263,7 @@ UObject *UObjectTest::testClassNoClassID(UObject *obj, const char *className, co #include "unicode/fmtable.h" #include "unicode/format.h" #include "unicode/gregocal.h" +#include "unicode/idna.h" #include "unicode/locdspnm.h" #include "unicode/locid.h" #include "unicode/msgfmt.h" @@ -325,6 +326,9 @@ void UObjectTest::testIDs() UnicodeSet emptySet; TESTCLASSID_NONE_CTOR(FilteredNormalizer2, (*noNormalizer2, emptySet)); TESTCLASSID_FACTORY(CanonicalIterator, new CanonicalIterator(UnicodeString("abc"), status)); +#endif +#if !UCONFIG_NO_IDNA + TESTCLASSID_NONE_FACTORY(IDNA, IDNA::createUTS46Instance(0, status)); #endif //TESTCLASSID_DEFAULT(CollationElementIterator); #if !UCONFIG_NO_COLLATION diff --git a/icu4c/source/test/intltest/ustrtest.cpp b/icu4c/source/test/intltest/ustrtest.cpp index 0b442fcb96..6d8270fcfd 100644 --- a/icu4c/source/test/intltest/ustrtest.cpp +++ b/icu4c/source/test/intltest/ustrtest.cpp @@ -1820,6 +1820,14 @@ UnicodeStringTest::TestUTF32() { } } +class TestCheckedArrayByteSink : public CheckedArrayByteSink { +public: + TestCheckedArrayByteSink(char* outbuf, int32_t capacity) + : CheckedArrayByteSink(outbuf, capacity), calledFlush(FALSE) {} + virtual void Flush() { calledFlush = TRUE; } + UBool calledFlush; +}; + void UnicodeStringTest::TestUTF8() { static const uint8_t utf8[] = { @@ -1869,13 +1877,16 @@ UnicodeStringTest::TestUTF8() { UnicodeString us(FALSE, utf16, LENGTHOF(utf16)); char buffer[64]; - CheckedArrayByteSink sink(buffer, (int32_t)sizeof(buffer)); + TestCheckedArrayByteSink sink(buffer, (int32_t)sizeof(buffer)); us.toUTF8(sink); if( sink.NumberOfBytesWritten() != (int32_t)sizeof(expected_utf8) || 0 != uprv_memcmp(buffer, expected_utf8, sizeof(expected_utf8)) ) { errln("UnicodeString::toUTF8() did not create the expected string."); } + if(!sink.calledFlush) { + errln("UnicodeString::toUTF8(sink) did not sink.Flush()."); + } #if U_HAVE_STD_STRING // Initial contents for testing that toUTF8String() appends. U_STD_NSQ string result8 = "-->"; diff --git a/icu4c/source/test/intltest/uts46test.cpp b/icu4c/source/test/intltest/uts46test.cpp new file mode 100644 index 0000000000..5aff1daaf6 --- /dev/null +++ b/icu4c/source/test/intltest/uts46test.cpp @@ -0,0 +1,830 @@ +/* +******************************************************************************* +* Copyright (C) 2010, International Business Machines +* Corporation and others. All Rights Reserved. +******************************************************************************* +* file name: uts46test.cpp +* encoding: US-ASCII +* tab size: 8 (not used) +* indentation:4 +* +* created on: 2010may05 +* created by: Markus W. Scherer +*/ + +#include "unicode/utypes.h" + +#if !UCONFIG_NO_IDNA + +#include +#include "unicode/bytestream.h" +#include "unicode/idna.h" +#include "unicode/localpointer.h" +#include "unicode/std_string.h" +#include "unicode/stringpiece.h" +#include "unicode/uidna.h" +#include "unicode/unistr.h" +#include "intltest.h" + +#define LENGTHOF(array) (int32_t)(sizeof(array)/sizeof((array)[0])) + +class UTS46Test : public IntlTest { +public: + UTS46Test() : trans(NULL), nontrans(NULL) {} + virtual ~UTS46Test(); + + void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par=NULL); + void TestAPI(); + void TestNotSTD3(); + void TestSomeCases(); +private: + IDNA *trans, *nontrans; +}; + +extern IntlTest *createUTS46Test() { + return new UTS46Test(); +} + +UTS46Test::~UTS46Test() { + delete trans; + delete nontrans; +} + +void UTS46Test::runIndexedTest(int32_t index, UBool exec, const char *&name, char * /*par*/) { + if(exec) { + logln("TestSuite UTS46Test: "); + if(trans==NULL) { + IcuTestErrorCode errorCode(*this, "init/createUTS46Instance()"); + trans=IDNA::createUTS46Instance( + UIDNA_USE_STD3_RULES|UIDNA_CHECK_BIDI|UIDNA_CHECK_CONTEXTJ, + errorCode); + nontrans=IDNA::createUTS46Instance( + UIDNA_USE_STD3_RULES|UIDNA_CHECK_BIDI|UIDNA_CHECK_CONTEXTJ| + UIDNA_NONTRANSITIONAL_TO_ASCII|UIDNA_NONTRANSITIONAL_TO_UNICODE, + errorCode); + if(errorCode.logDataIfFailureAndReset("createUTS46Instance()")) { + name=""; + return; + } + } + } + TESTCASE_AUTO_BEGIN; + TESTCASE_AUTO(TestAPI); + TESTCASE_AUTO(TestNotSTD3); + TESTCASE_AUTO(TestSomeCases); + TESTCASE_AUTO_END; +} + +const uint32_t severeErrors= + UIDNA_ERROR_LEADING_COMBINING_MARK| + UIDNA_ERROR_DISALLOWED| + UIDNA_ERROR_PUNYCODE| + UIDNA_ERROR_LABEL_HAS_DOT| + UIDNA_ERROR_INVALID_ACE_LABEL; + +static UBool isASCII(const UnicodeString &str) { + const UChar *s=str.getBuffer(); + int32_t length=str.length(); + for(int32_t i=0; i=0x80) { + return FALSE; + } + } + return TRUE; +} + +class TestCheckedArrayByteSink : public CheckedArrayByteSink { +public: + TestCheckedArrayByteSink(char* outbuf, int32_t capacity) + : CheckedArrayByteSink(outbuf, capacity), calledFlush(FALSE) {} + virtual CheckedArrayByteSink& Reset() { + CheckedArrayByteSink::Reset(); + calledFlush = FALSE; + return *this; + } + virtual void Flush() { calledFlush = TRUE; } + UBool calledFlush; +}; + +void UTS46Test::TestAPI() { + UErrorCode errorCode=U_ZERO_ERROR; + UnicodeString result; + IDNAInfo info; + UnicodeString input=UNICODE_STRING_SIMPLE("www.eXample.cOm"); + UnicodeString expected=UNICODE_STRING_SIMPLE("www.example.com"); + trans->nameToASCII(input, result, info, errorCode); + if(U_FAILURE(errorCode) || info.hasErrors() || result!=expected) { + errln("T.nameToASCII(www.example.com) info.errors=%04lx result matches=%d %s", + (long)info.getErrors(), result==expected, u_errorName(errorCode)); + } + errorCode=U_USELESS_COLLATOR_ERROR; + trans->nameToUnicode(input, result, info, errorCode); + if(errorCode!=U_USELESS_COLLATOR_ERROR || !result.isBogus()) { + errln("T.nameToUnicode(U_FAILURE) did not preserve the errorCode " + "or not result.setToBogus() - %s", + u_errorName(errorCode)); + } + errorCode=U_ZERO_ERROR; + input.setToBogus(); + result=UNICODE_STRING_SIMPLE("quatsch"); + nontrans->labelToASCII(input, result, info, errorCode); + if(errorCode!=U_ILLEGAL_ARGUMENT_ERROR || !result.isBogus()) { + errln("N.labelToASCII(bogus) did not set illegal-argument-error " + "or not result.setToBogus() - %s", + u_errorName(errorCode)); + } + errorCode=U_ZERO_ERROR; + input=UNICODE_STRING_SIMPLE("xn--bcher.de-65a"); + expected=UNICODE_STRING_SIMPLE("xn--bcher\\uFFFDde-65a").unescape(); + nontrans->labelToASCII(input, result, info, errorCode); + if( U_FAILURE(errorCode) || + info.getErrors()!=(UIDNA_ERROR_LABEL_HAS_DOT|UIDNA_ERROR_INVALID_ACE_LABEL) || + result!=expected + ) { + errln("N.labelToASCII(label-with-dot) failed with errors %04lx - %s", + info.getErrors(), u_errorName(errorCode)); + } + // UTF-8 + char buffer[100]; + TestCheckedArrayByteSink sink(buffer, LENGTHOF(buffer)); + errorCode=U_ZERO_ERROR; + nontrans->labelToUnicodeUTF8(StringPiece(NULL, 5), sink, info, errorCode); + if(errorCode!=U_ILLEGAL_ARGUMENT_ERROR || sink.NumberOfBytesWritten()!=0) { + errln("N.labelToUnicodeUTF8(StringPiece(NULL, 5)) did not set illegal-argument-error ", + "or did output something - %s", + u_errorName(errorCode)); + } + + sink.Reset(); + errorCode=U_ZERO_ERROR; + nontrans->nameToASCII_UTF8(StringPiece(), sink, info, errorCode); + if(U_FAILURE(errorCode) || sink.NumberOfBytesWritten()!=0 || !sink.calledFlush) { + errln("N.nameToASCII_UTF8(empty) failed - %s", + u_errorName(errorCode)); + } + + static const char s[]={ 0x61, (char)0xc3, (char)0x9f }; + sink.Reset(); + errorCode=U_USELESS_COLLATOR_ERROR; + nontrans->nameToUnicodeUTF8(StringPiece(s, 3), sink, info, errorCode); + if(errorCode!=U_USELESS_COLLATOR_ERROR || sink.NumberOfBytesWritten()!=0) { + errln("N.nameToUnicode_UTF8(U_FAILURE) did not preserve the errorCode " + "or did output something - %s", + u_errorName(errorCode)); + } + + sink.Reset(); + errorCode=U_ZERO_ERROR; + trans->labelToUnicodeUTF8(StringPiece(s, 3), sink, info, errorCode); + if( U_FAILURE(errorCode) || sink.NumberOfBytesWritten()!=3 || + buffer[0]!=0x61 || buffer[1]!=0x73 || buffer[2]!=0x73 || + !sink.calledFlush + ) { + errln("T.labelToUnicodeUTF8(a sharp-s) failed - %s", + u_errorName(errorCode)); + } + + sink.Reset(); + errorCode=U_ZERO_ERROR; + // "eXampLe.cOm" + static const char eX[]={ 0x65, 0x58, 0x61, 0x6d, 0x70, 0x4c, 0x65, 0x2e, 0x63, 0x4f, 0x6d, 0 }; + // "example.com" + static const char ex[]={ 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d }; + trans->nameToUnicodeUTF8(eX, sink, info, errorCode); + if( U_FAILURE(errorCode) || sink.NumberOfBytesWritten()!=11 || + 0!=memcmp(ex, buffer, 11) || !sink.calledFlush + ) { + errln("T.nameToUnicodeUTF8(eXampLe.cOm) failed - %s", + u_errorName(errorCode)); + } +} + +void UTS46Test::TestNotSTD3() { + IcuTestErrorCode errorCode(*this, "TestNotSTD3()"); + char buffer[400]; + LocalPointer not3(IDNA::createUTS46Instance(UIDNA_CHECK_BIDI, errorCode)); + if(errorCode.isFailure()) { + return; + } + UnicodeString input=UNICODE_STRING_SIMPLE("\\u0000A_2+2=4\\u000A.e\\u00DFen.net").unescape(); + UnicodeString result; + IDNAInfo info; + if( not3->nameToUnicode(input, result, info, errorCode)!= + UNICODE_STRING_SIMPLE("\\u0000a_2+2=4\\u000A.essen.net").unescape() || + info.hasErrors() + ) { + prettify(result).extract(0, 0x7fffffff, buffer, LENGTHOF(buffer)); + errln("notSTD3.nameToUnicode(non-LDH ASCII) unexpected errors %04lx string %s", + (long)info.getErrors(), buffer); + } + // A space (BiDi class WS) is not allowed in a BiDi domain name. + input=UNICODE_STRING_SIMPLE("a z.xn--4db.edu"); + not3->nameToASCII(input, result, info, errorCode); + if(result!=input || info.getErrors()!=UIDNA_ERROR_BIDI) { + errln("notSTD3.nameToASCII(ASCII-with-space.alef.edu) failed"); + } +} + +struct TestCase { + // Input string and options string (Nontransitional/Transitional/Both). + const char *s, *o; + // Expected Unicode result string. + const char *u; + uint32_t errors; +}; + +static const TestCase testCases[]={ + { "www.eXample.cOm", "B", // all ASCII + "www.example.com", 0 }, + { "B\\u00FCcher.de", "B", // u-umlaut + "b\\u00FCcher.de", 0 }, + { "\\u00D6BB", "B", // O-umlaut + "\\u00F6bb", 0 }, + { "fa\\u00DF.de", "N", // sharp s + "fa\\u00DF.de", 0 }, + { "fa\\u00DF.de", "T", // sharp s + "fass.de", 0 }, + { "XN--fA-hia.dE", "B", // sharp s in Punycode + "fa\\u00DF.de", 0 }, + { "\\u03B2\\u03CC\\u03BB\\u03BF\\u03C2.com", "N", // Greek with final sigma + "\\u03B2\\u03CC\\u03BB\\u03BF\\u03C2.com", 0 }, + { "\\u03B2\\u03CC\\u03BB\\u03BF\\u03C2.com", "T", // Greek with final sigma + "\\u03B2\\u03CC\\u03BB\\u03BF\\u03C3.com", 0 }, + { "xn--nxasmm1c", "B", // Greek with final sigma in Punycode + "\\u03B2\\u03CC\\u03BB\\u03BF\\u03C2", 0 }, + { "www.\\u0DC1\\u0DCA\\u200D\\u0DBB\\u0DD3.com", "N", // "Sri" in "Sri Lanka" has a ZWJ + "www.\\u0DC1\\u0DCA\\u200D\\u0DBB\\u0DD3.com", 0 }, + { "www.\\u0DC1\\u0DCA\\u200D\\u0DBB\\u0DD3.com", "T", // "Sri" in "Sri Lanka" has a ZWJ + "www.\\u0DC1\\u0DCA\\u0DBB\\u0DD3.com", 0 }, + { "www.xn--10cl1a0b660p.com", "B", // "Sri" in Punycode + "www.\\u0DC1\\u0DCA\\u200D\\u0DBB\\u0DD3.com", 0 }, + { "\\u0646\\u0627\\u0645\\u0647\\u200C\\u0627\\u06CC", "N", // ZWNJ + "\\u0646\\u0627\\u0645\\u0647\\u200C\\u0627\\u06CC", 0 }, + { "\\u0646\\u0627\\u0645\\u0647\\u200C\\u0627\\u06CC", "T", // ZWNJ + "\\u0646\\u0627\\u0645\\u0647\\u0627\\u06CC", 0 }, + { "xn--mgba3gch31f060k.com", "B", // ZWNJ in Punycode + "\\u0646\\u0627\\u0645\\u0647\\u200C\\u0627\\u06CC.com", 0 }, + { "a.b\\uFF0Ec\\u3002d\\uFF61", "B", + "a.b.c.d.", 0 }, + { "U\\u0308.xn--tda", "B", // U+umlaut.u-umlaut + "\\u00FC.\\u00FC", 0 }, + { "xn--u-ccb", "B", // u+umlaut in Punycode + "xn--u-ccb\\uFFFD", UIDNA_ERROR_INVALID_ACE_LABEL }, + { "a\\u2488com", "B", // contains 1-dot + "a\\uFFFDcom", UIDNA_ERROR_DISALLOWED }, + { "xn--a-ecp.ru", "B", // contains 1-dot in Punycode + "xn--a-ecp\\uFFFD.ru", UIDNA_ERROR_INVALID_ACE_LABEL }, + { "xn--0.pt", "B", // invalid Punycode + "xn--0\\uFFFD.pt", UIDNA_ERROR_PUNYCODE }, + { "xn--a.pt", "B", // U+0080 + "xn--a\\uFFFD.pt", UIDNA_ERROR_INVALID_ACE_LABEL }, + { "xn--a-\\u00C4.pt", "B", // invalid Punycode + "xn--a-\\u00E4.pt", UIDNA_ERROR_PUNYCODE }, + { "\\u65E5\\u672C\\u8A9E\\u3002\\uFF2A\\uFF30", "B", // Japanese with fullwidth ".jp" + "\\u65E5\\u672C\\u8A9E.jp", 0 }, + { "\\u2615", "B", "\\u2615", 0 }, // Unicode 4.0 HOT BEVERAGE + // many deviation characters, test the special mapping code + { "1.a\\u00DF\\u200C\\u200Db\\u200C\\u200Dc\\u00DF\\u00DF\\u00DF\\u00DFd" + "\\u03C2\\u03C3\\u00DF\\u00DF\\u00DF\\u00DF\\u00DF\\u00DF\\u00DF\\u00DFe" + "\\u00DF\\u00DF\\u00DF\\u00DF\\u00DF\\u00DF\\u00DF\\u00DF\\u00DF\\u00DFx" + "\\u00DF\\u00DF\\u00DF\\u00DF\\u00DF\\u00DF\\u00DF\\u00DF\\u00DF\\u00DFy" + "\\u00DF\\u00DF\\u00DF\\u00DF\\u00DF\\u00DF\\u00DF\\u00DF\\u0302\\u00DFz", "N", + "1.a\\u00DF\\u200C\\u200Db\\u200C\\u200Dc\\u00DF\\u00DF\\u00DF\\u00DFd" + "\\u03C2\\u03C3\\u00DF\\u00DF\\u00DF\\u00DF\\u00DF\\u00DF\\u00DF\\u00DFe" + "\\u00DF\\u00DF\\u00DF\\u00DF\\u00DF\\u00DF\\u00DF\\u00DF\\u00DF\\u00DFx" + "\\u00DF\\u00DF\\u00DF\\u00DF\\u00DF\\u00DF\\u00DF\\u00DF\\u00DF\\u00DFy" + "\\u00DF\\u00DF\\u00DF\\u00DF\\u00DF\\u00DF\\u00DF\\u00DF\\u0302\\u00DFz", + UIDNA_ERROR_LABEL_TOO_LONG|UIDNA_ERROR_CONTEXTJ }, + { "1.a\\u00DF\\u200C\\u200Db\\u200C\\u200Dc\\u00DF\\u00DF\\u00DF\\u00DFd" + "\\u03C2\\u03C3\\u00DF\\u00DF\\u00DF\\u00DF\\u00DF\\u00DF\\u00DF\\u00DFe" + "\\u00DF\\u00DF\\u00DF\\u00DF\\u00DF\\u00DF\\u00DF\\u00DF\\u00DF\\u00DFx" + "\\u00DF\\u00DF\\u00DF\\u00DF\\u00DF\\u00DF\\u00DF\\u00DF\\u00DF\\u00DFy" + "\\u00DF\\u00DF\\u00DF\\u00DF\\u00DF\\u00DF\\u00DF\\u00DF\\u0302\\u00DFz", "T", + "1.assbcssssssssd" + "\\u03C3\\u03C3sssssssssssssssse" + "ssssssssssssssssssssx" + "ssssssssssssssssssssy" + "sssssssssssssss\\u015Dssz", UIDNA_ERROR_LABEL_TOO_LONG }, + // "xn--bss" with deviation characters + { "\\u200Cx\\u200Dn\\u200C-\\u200D-b\\u00DF", "N", + "\\u200Cx\\u200Dn\\u200C-\\u200D-b\\u00DF", UIDNA_ERROR_CONTEXTJ }, + { "\\u200Cx\\u200Dn\\u200C-\\u200D-b\\u00DF", "T", + "\\u5919", 0 }, + // "xn--bssffl" written as: + // 02E3 MODIFIER LETTER SMALL X + // 034F COMBINING GRAPHEME JOINER (ignored) + // 2115 DOUBLE-STRUCK CAPITAL N + // 200B ZERO WIDTH SPACE (ignored) + // FE63 SMALL HYPHEN-MINUS + // 00AD SOFT HYPHEN (ignored) + // FF0D FULLWIDTH HYPHEN-MINUS + // 180C MONGOLIAN FREE VARIATION SELECTOR TWO (ignored) + // 212C SCRIPT CAPITAL B + // FE00 VARIATION SELECTOR-1 (ignored) + // 017F LATIN SMALL LETTER LONG S + // 2064 INVISIBLE PLUS (ignored) + // 1D530 MATHEMATICAL FRAKTUR SMALL S + // E01EF VARIATION SELECTOR-256 (ignored) + // FB04 LATIN SMALL LIGATURE FFL + { "\\u02E3\\u034F\\u2115\\u200B\\uFE63\\u00AD\\uFF0D\\u180C" + "\\u212C\\uFE00\\u017F\\u2064\\U0001D530\\U000E01EF\\uFB04", "B", + "\\u5921\\u591E\\u591C\\u5919", 0 }, + { "123456789012345678901234567890123456789012345678901234567890123." + "123456789012345678901234567890123456789012345678901234567890123." + "123456789012345678901234567890123456789012345678901234567890123." + "1234567890123456789012345678901234567890123456789012345678901", "B", + "123456789012345678901234567890123456789012345678901234567890123." + "123456789012345678901234567890123456789012345678901234567890123." + "123456789012345678901234567890123456789012345678901234567890123." + "1234567890123456789012345678901234567890123456789012345678901", 0 }, + { "123456789012345678901234567890123456789012345678901234567890123." + "123456789012345678901234567890123456789012345678901234567890123." + "123456789012345678901234567890123456789012345678901234567890123." + "1234567890123456789012345678901234567890123456789012345678901.", "B", + "123456789012345678901234567890123456789012345678901234567890123." + "123456789012345678901234567890123456789012345678901234567890123." + "123456789012345678901234567890123456789012345678901234567890123." + "1234567890123456789012345678901234567890123456789012345678901.", 0 }, + // Domain name >256 characters, forces slow path in UTF-8 processing. + { "123456789012345678901234567890123456789012345678901234567890123." + "123456789012345678901234567890123456789012345678901234567890123." + "123456789012345678901234567890123456789012345678901234567890123." + "123456789012345678901234567890123456789012345678901234567890123." + "12345678901234567890123456789012345678901234567890123456789012", "B", + "123456789012345678901234567890123456789012345678901234567890123." + "123456789012345678901234567890123456789012345678901234567890123." + "123456789012345678901234567890123456789012345678901234567890123." + "123456789012345678901234567890123456789012345678901234567890123." + "12345678901234567890123456789012345678901234567890123456789012", + UIDNA_ERROR_DOMAIN_NAME_TOO_LONG }, + { "123456789012345678901234567890123456789012345678901234567890123." + "123456789012345678901234567890123456789012345678901234567890123." + "123456789012345678901234567890123456789012345678901234567890123." + "123456789012345678901234567890123456789012345678901234567890123." + "1234567890123456789012345678901234567890123456789\\u05D0", "B", + "123456789012345678901234567890123456789012345678901234567890123." + "123456789012345678901234567890123456789012345678901234567890123." + "123456789012345678901234567890123456789012345678901234567890123." + "123456789012345678901234567890123456789012345678901234567890123." + "1234567890123456789012345678901234567890123456789\\u05D0", + UIDNA_ERROR_DOMAIN_NAME_TOO_LONG|UIDNA_ERROR_BIDI }, + { "123456789012345678901234567890123456789012345678901234567890123." + "1234567890123456789012345678901234567890123456789012345678901234." + "123456789012345678901234567890123456789012345678901234567890123." + "123456789012345678901234567890123456789012345678901234567890", "B", + "123456789012345678901234567890123456789012345678901234567890123." + "1234567890123456789012345678901234567890123456789012345678901234." + "123456789012345678901234567890123456789012345678901234567890123." + "123456789012345678901234567890123456789012345678901234567890", + UIDNA_ERROR_LABEL_TOO_LONG }, + { "123456789012345678901234567890123456789012345678901234567890123." + "1234567890123456789012345678901234567890123456789012345678901234." + "123456789012345678901234567890123456789012345678901234567890123." + "123456789012345678901234567890123456789012345678901234567890.", "B", + "123456789012345678901234567890123456789012345678901234567890123." + "1234567890123456789012345678901234567890123456789012345678901234." + "123456789012345678901234567890123456789012345678901234567890123." + "123456789012345678901234567890123456789012345678901234567890.", + UIDNA_ERROR_LABEL_TOO_LONG }, + { "123456789012345678901234567890123456789012345678901234567890123." + "1234567890123456789012345678901234567890123456789012345678901234." + "123456789012345678901234567890123456789012345678901234567890123." + "1234567890123456789012345678901234567890123456789012345678901", "B", + "123456789012345678901234567890123456789012345678901234567890123." + "1234567890123456789012345678901234567890123456789012345678901234." + "123456789012345678901234567890123456789012345678901234567890123." + "1234567890123456789012345678901234567890123456789012345678901", + UIDNA_ERROR_LABEL_TOO_LONG|UIDNA_ERROR_DOMAIN_NAME_TOO_LONG }, + // label length 63: xn--1234567890123456789012345678901234567890123456789012345-9te + { "\\u00E41234567890123456789012345678901234567890123456789012345", "B", + "\\u00E41234567890123456789012345678901234567890123456789012345", 0 }, + { "1234567890\\u00E41234567890123456789012345678901234567890123456", "B", + "1234567890\\u00E41234567890123456789012345678901234567890123456", UIDNA_ERROR_LABEL_TOO_LONG }, + { "123456789012345678901234567890123456789012345678901234567890123." + "1234567890\\u00E4123456789012345678901234567890123456789012345." + "123456789012345678901234567890123456789012345678901234567890123." + "1234567890123456789012345678901234567890123456789012345678901", "B", + "123456789012345678901234567890123456789012345678901234567890123." + "1234567890\\u00E4123456789012345678901234567890123456789012345." + "123456789012345678901234567890123456789012345678901234567890123." + "1234567890123456789012345678901234567890123456789012345678901", 0 }, + { "123456789012345678901234567890123456789012345678901234567890123." + "1234567890\\u00E4123456789012345678901234567890123456789012345." + "123456789012345678901234567890123456789012345678901234567890123." + "1234567890123456789012345678901234567890123456789012345678901.", "B", + "123456789012345678901234567890123456789012345678901234567890123." + "1234567890\\u00E4123456789012345678901234567890123456789012345." + "123456789012345678901234567890123456789012345678901234567890123." + "1234567890123456789012345678901234567890123456789012345678901.", 0 }, + { "123456789012345678901234567890123456789012345678901234567890123." + "1234567890\\u00E4123456789012345678901234567890123456789012345." + "123456789012345678901234567890123456789012345678901234567890123." + "12345678901234567890123456789012345678901234567890123456789012", "B", + "123456789012345678901234567890123456789012345678901234567890123." + "1234567890\\u00E4123456789012345678901234567890123456789012345." + "123456789012345678901234567890123456789012345678901234567890123." + "12345678901234567890123456789012345678901234567890123456789012", + UIDNA_ERROR_DOMAIN_NAME_TOO_LONG }, + { "123456789012345678901234567890123456789012345678901234567890123." + "1234567890\\u00E41234567890123456789012345678901234567890123456." + "123456789012345678901234567890123456789012345678901234567890123." + "123456789012345678901234567890123456789012345678901234567890", "B", + "123456789012345678901234567890123456789012345678901234567890123." + "1234567890\\u00E41234567890123456789012345678901234567890123456." + "123456789012345678901234567890123456789012345678901234567890123." + "123456789012345678901234567890123456789012345678901234567890", + UIDNA_ERROR_LABEL_TOO_LONG }, + { "123456789012345678901234567890123456789012345678901234567890123." + "1234567890\\u00E41234567890123456789012345678901234567890123456." + "123456789012345678901234567890123456789012345678901234567890123." + "123456789012345678901234567890123456789012345678901234567890.", "B", + "123456789012345678901234567890123456789012345678901234567890123." + "1234567890\\u00E41234567890123456789012345678901234567890123456." + "123456789012345678901234567890123456789012345678901234567890123." + "123456789012345678901234567890123456789012345678901234567890.", + UIDNA_ERROR_LABEL_TOO_LONG }, + { "123456789012345678901234567890123456789012345678901234567890123." + "1234567890\\u00E41234567890123456789012345678901234567890123456." + "123456789012345678901234567890123456789012345678901234567890123." + "1234567890123456789012345678901234567890123456789012345678901", "B", + "123456789012345678901234567890123456789012345678901234567890123." + "1234567890\\u00E41234567890123456789012345678901234567890123456." + "123456789012345678901234567890123456789012345678901234567890123." + "1234567890123456789012345678901234567890123456789012345678901", + UIDNA_ERROR_LABEL_TOO_LONG|UIDNA_ERROR_DOMAIN_NAME_TOO_LONG }, + // hyphen errors and empty-label errors + // "xn---q----jra"=="-q--a-umlaut-" + { "a.b..-q--a-.e", "B", "a.b..-q--a-.e", + UIDNA_ERROR_EMPTY_LABEL|UIDNA_ERROR_LEADING_HYPHEN|UIDNA_ERROR_TRAILING_HYPHEN| + UIDNA_ERROR_HYPHEN_3_4 }, + { "a.b..-q--\\u00E4-.e", "B", "a.b..-q--\\u00E4-.e", + UIDNA_ERROR_EMPTY_LABEL|UIDNA_ERROR_LEADING_HYPHEN|UIDNA_ERROR_TRAILING_HYPHEN| + UIDNA_ERROR_HYPHEN_3_4 }, + { "a.b..xn---q----jra.e", "B", "a.b..-q--\\u00E4-.e", + UIDNA_ERROR_EMPTY_LABEL|UIDNA_ERROR_LEADING_HYPHEN|UIDNA_ERROR_TRAILING_HYPHEN| + UIDNA_ERROR_HYPHEN_3_4 }, + { "a..c", "B", "a..c", UIDNA_ERROR_EMPTY_LABEL }, + { "a.-b.", "B", "a.-b.", UIDNA_ERROR_LEADING_HYPHEN }, + { "a.b-.c", "B", "a.b-.c", UIDNA_ERROR_TRAILING_HYPHEN }, + { "a.-.c", "B", "a.-.c", UIDNA_ERROR_LEADING_HYPHEN|UIDNA_ERROR_TRAILING_HYPHEN }, + { "a.bc--de.f", "B", "a.bc--de.f", UIDNA_ERROR_HYPHEN_3_4 }, + { "\\u00E4.\\u00AD.c", "B", "\\u00E4..c", UIDNA_ERROR_EMPTY_LABEL }, + { "\\u00E4.-b.", "B", "\\u00E4.-b.", UIDNA_ERROR_LEADING_HYPHEN }, + { "\\u00E4.b-.c", "B", "\\u00E4.b-.c", UIDNA_ERROR_TRAILING_HYPHEN }, + { "\\u00E4.-.c", "B", "\\u00E4.-.c", UIDNA_ERROR_LEADING_HYPHEN|UIDNA_ERROR_TRAILING_HYPHEN }, + { "\\u00E4.bc--de.f", "B", "\\u00E4.bc--de.f", UIDNA_ERROR_HYPHEN_3_4 }, + { "a.b.\\u0308c.d", "B", "a.b.\\uFFFDc.d", UIDNA_ERROR_LEADING_COMBINING_MARK }, + { "a.b.xn--c-bcb.d", "B", + "a.b.xn--c-bcb\\uFFFD.d", UIDNA_ERROR_LEADING_COMBINING_MARK|UIDNA_ERROR_INVALID_ACE_LABEL }, + // BiDi + { "A0", "B", "a0", 0 }, + { "0A", "B", "0a", 0 }, // all-LTR is ok to start with a digit (EN) + { "0A.\\u05D0", "B", // ASCII label does not start with L/R/AL + "0a.\\u05D0", UIDNA_ERROR_BIDI }, + { "c.xn--0-eha.xn--4db", "B", // 2nd label does not start with L/R/AL + "c.0\\u00FC.\\u05D0", UIDNA_ERROR_BIDI }, + { "b-.\\u05D0", "B", // label does not end with L/EN + "b-.\\u05D0", UIDNA_ERROR_TRAILING_HYPHEN|UIDNA_ERROR_BIDI }, + { "d.xn----dha.xn--4db", "B", // 2nd label does not end with L/EN + "d.\\u00FC-.\\u05D0", UIDNA_ERROR_TRAILING_HYPHEN|UIDNA_ERROR_BIDI }, + { "a\\u05D0", "B", "a\\u05D0", UIDNA_ERROR_BIDI }, // first dir != last dir + { "\\u05D0\\u05C7", "B", "\\u05D0\\u05C7", 0 }, + { "\\u05D09\\u05C7", "B", "\\u05D09\\u05C7", 0 }, + { "\\u05D0a\\u05C7", "B", "\\u05D0a\\u05C7", UIDNA_ERROR_BIDI }, // first dir != last dir + { "\\u05D0\\u05EA", "B", "\\u05D0\\u05EA", 0 }, + { "\\u05D0\\u05F3\\u05EA", "B", "\\u05D0\\u05F3\\u05EA", 0 }, + { "a\\u05D0Tz", "B", "a\\u05D0tz", UIDNA_ERROR_BIDI }, // mixed dir + { "\\u05D0T\\u05EA", "B", "\\u05D0t\\u05EA", UIDNA_ERROR_BIDI }, // mixed dir + { "\\u05D07\\u05EA", "B", "\\u05D07\\u05EA", 0 }, + { "\\u05D0\\u0667\\u05EA", "B", "\\u05D0\\u0667\\u05EA", 0 }, // Arabic 7 in the middle + { "a7\\u0667z", "B", "a7\\u0667z", UIDNA_ERROR_BIDI }, // AN digit in LTR + { "\\u05D07\\u0667\\u05EA", "B", // mixed EN/AN digits in RTL + "\\u05D07\\u0667\\u05EA", UIDNA_ERROR_BIDI }, + // ZWJ + { "\\u0BB9\\u0BCD\\u200D", "N", "\\u0BB9\\u0BCD\\u200D", 0 }, // Virama+ZWJ + { "\\u0BB9\\u200D", "N", "\\u0BB9\\u200D", UIDNA_ERROR_CONTEXTJ }, // no Virama + { "\\u200D", "N", "\\u200D", UIDNA_ERROR_CONTEXTJ }, // no Virama + // ZWNJ + { "\\u0BB9\\u0BCD\\u200C", "N", "\\u0BB9\\u0BCD\\u200C", 0 }, // Virama+ZWNJ + { "\\u0BB9\\u200C", "N", "\\u0BB9\\u200C", UIDNA_ERROR_CONTEXTJ }, // no Virama + { "\\u200C", "N", "\\u200C", UIDNA_ERROR_CONTEXTJ }, // no Virama + { "\\u0644\\u0670\\u200C\\u06ED\\u06EF", "N", // Joining types D T ZWNJ T R + "\\u0644\\u0670\\u200C\\u06ED\\u06EF", 0 }, + { "\\u0644\\u0670\\u200C\\u06EF", "N", // D T ZWNJ R + "\\u0644\\u0670\\u200C\\u06EF", 0 }, + { "\\u0644\\u200C\\u06ED\\u06EF", "N", // D ZWNJ T R + "\\u0644\\u200C\\u06ED\\u06EF", 0 }, + { "\\u0644\\u200C\\u06EF", "N", // D ZWNJ R + "\\u0644\\u200C\\u06EF", 0 }, + { "\\u0644\\u0670\\u200C\\u06ED", "N", // D T ZWNJ T + "\\u0644\\u0670\\u200C\\u06ED", UIDNA_ERROR_BIDI|UIDNA_ERROR_CONTEXTJ }, + { "\\u06EF\\u200C\\u06EF", "N", // R ZWNJ R + "\\u06EF\\u200C\\u06EF", UIDNA_ERROR_CONTEXTJ }, + { "\\u0644\\u200C", "N", // D ZWNJ + "\\u0644\\u200C", UIDNA_ERROR_BIDI|UIDNA_ERROR_CONTEXTJ }, + // { "", "B", + // "", 0 }, +}; + +void UTS46Test::TestSomeCases() { + IcuTestErrorCode errorCode(*this, "TestSomeCases"); + char buffer[400], buffer2[400]; + int32_t i; + for(i=0; inameToASCII(input, aT, aTInfo, errorCode); + trans->nameToUnicode(input, uT, uTInfo, errorCode); + nontrans->nameToASCII(input, aN, aNInfo, errorCode); + nontrans->nameToUnicode(input, uN, uNInfo, errorCode); + if(errorCode.logIfFailureAndReset("first-level processing [%d/%s] %s", + (int)i, testCase.o, testCase.s) + ) { + continue; + } + // ToUnicode does not set length errors. + uint32_t uniErrors=testCase.errors&~ + (UIDNA_ERROR_EMPTY_LABEL| + UIDNA_ERROR_LABEL_TOO_LONG| + UIDNA_ERROR_DOMAIN_NAME_TOO_LONG); + char mode=testCase.o[0]; + if(mode=='B' || mode=='N') { + if(uNInfo.getErrors()!=uniErrors) { + errln("N.nameToUnicode([%d] %s) unexpected errors %04lx", + (int)i, testCase.s, (long)uNInfo.getErrors()); + continue; + } + if(uN!=expected) { + prettify(uN).extract(0, 0x7fffffff, buffer, LENGTHOF(buffer)); + errln("N.nameToUnicode([%d] %s) unexpected string %s", + (int)i, testCase.s, buffer); + continue; + } + if(aNInfo.getErrors()!=testCase.errors) { + errln("N.nameToASCII([%d] %s) unexpected errors %04lx", + (int)i, testCase.s, (long)aNInfo.getErrors()); + continue; + } + } + if(mode=='B' || mode=='T') { + if(uTInfo.getErrors()!=uniErrors) { + errln("T.nameToUnicode([%d] %s) unexpected errors %04lx", + (int)i, testCase.s, (long)uTInfo.getErrors()); + continue; + } + if(uT!=expected) { + prettify(uT).extract(0, 0x7fffffff, buffer, LENGTHOF(buffer)); + errln("T.nameToUnicode([%d] %s) unexpected string %s", + (int)i, testCase.s, buffer); + continue; + } + if(aTInfo.getErrors()!=testCase.errors) { + errln("T.nameToASCII([%d] %s) unexpected errors %04lx", + (int)i, testCase.s, (long)aTInfo.getErrors()); + continue; + } + } + // ToASCII is all-ASCII if no severe errors + if((aNInfo.getErrors()&severeErrors)==0 && !isASCII(aN)) { + prettify(aN).extract(0, 0x7fffffff, buffer, LENGTHOF(buffer)); + errln("N.nameToASCII([%d] %s) (errors %04lx) result is not ASCII %s", + (int)i, testCase.s, aNInfo.getErrors(), buffer); + continue; + } + if((aTInfo.getErrors()&severeErrors)==0 && !isASCII(aT)) { + prettify(aT).extract(0, 0x7fffffff, buffer, LENGTHOF(buffer)); + errln("T.nameToASCII([%d] %s) (errors %04lx) result is not ASCII %s", + (int)i, testCase.s, aTInfo.getErrors(), buffer); + continue; + } + if(verbose) { + char m= mode=='B' ? mode : 'N'; + prettify(aN).extract(0, 0x7fffffff, buffer, LENGTHOF(buffer)); + logln("%c.nameToASCII([%d] %s) (errors %04lx) result string: %s", + m, (int)i, testCase.s, aNInfo.getErrors(), buffer); + if(mode!='B') { + prettify(aT).extract(0, 0x7fffffff, buffer, LENGTHOF(buffer)); + logln("T.nameToASCII([%d] %s) (errors %04lx) result string: %s", + (int)i, testCase.s, aTInfo.getErrors(), buffer); + } + } + // second-level processing + UnicodeString aTuN, uTaN, aNuN, uNaN; + IDNAInfo aTuNInfo, uTaNInfo, aNuNInfo, uNaNInfo; + nontrans->nameToUnicode(aT, aTuN, aTuNInfo, errorCode); + nontrans->nameToASCII(uT, uTaN, uTaNInfo, errorCode); + nontrans->nameToUnicode(aN, aNuN, aNuNInfo, errorCode); + nontrans->nameToASCII(uN, uNaN, uNaNInfo, errorCode); + if(errorCode.logIfFailureAndReset("second-level processing [%d/%s] %s", + (int)i, testCase.o, testCase.s) + ) { + continue; + } + if(aN!=uNaN) { + prettify(aN).extract(0, 0x7fffffff, buffer, LENGTHOF(buffer)); + prettify(uNaN).extract(0, 0x7fffffff, buffer2, LENGTHOF(buffer2)); + errln("N.nameToASCII([%d] %s)!=N.nameToUnicode().N.nameToASCII() " + "(errors %04lx) %s vs. %s", + (int)i, testCase.s, aNInfo.getErrors(), buffer, buffer2); + continue; + } + if(aT!=uTaN) { + prettify(aT).extract(0, 0x7fffffff, buffer, LENGTHOF(buffer)); + prettify(uTaN).extract(0, 0x7fffffff, buffer2, LENGTHOF(buffer2)); + errln("T.nameToASCII([%d] %s)!=T.nameToUnicode().N.nameToASCII() " + "(errors %04lx) %s vs. %s", + (int)i, testCase.s, aNInfo.getErrors(), buffer, buffer2); + continue; + } + if(uN!=aNuN) { + prettify(uN).extract(0, 0x7fffffff, buffer, LENGTHOF(buffer)); + prettify(aNuN).extract(0, 0x7fffffff, buffer2, LENGTHOF(buffer2)); + errln("N.nameToUnicode([%d] %s)!=N.nameToASCII().N.nameToUnicode() " + "(errors %04lx) %s vs. %s", + (int)i, testCase.s, uNInfo.getErrors(), buffer, buffer2); + continue; + } + if(uT!=aTuN) { + prettify(uT).extract(0, 0x7fffffff, buffer, LENGTHOF(buffer)); + prettify(aTuN).extract(0, 0x7fffffff, buffer2, LENGTHOF(buffer2)); + errln("T.nameToUnicode([%d] %s)!=T.nameToASCII().N.nameToUnicode() " + "(errors %04lx) %s vs. %s", + (int)i, testCase.s, uNInfo.getErrors(), buffer, buffer2); + continue; + } + // labelToUnicode + UnicodeString aTL, uTL, aNL, uNL; + IDNAInfo aTLInfo, uTLInfo, aNLInfo, uNLInfo; + trans->labelToASCII(input, aTL, aTLInfo, errorCode); + trans->labelToUnicode(input, uTL, uTLInfo, errorCode); + nontrans->labelToASCII(input, aNL, aNLInfo, errorCode); + nontrans->labelToUnicode(input, uNL, uNLInfo, errorCode); + if(errorCode.logIfFailureAndReset("labelToXYZ processing [%d/%s] %s", + (int)i, testCase.o, testCase.s) + ) { + continue; + } + if(aN.indexOf((UChar)0x2e)<0) { + if(aN!=aNL || aNInfo.getErrors()!=aNLInfo.getErrors()) { + prettify(aN).extract(0, 0x7fffffff, buffer, LENGTHOF(buffer)); + prettify(aNL).extract(0, 0x7fffffff, buffer2, LENGTHOF(buffer2)); + errln("N.nameToASCII([%d] %s)!=N.labelToASCII() " + "(errors %04lx vs %04lx) %s vs. %s", + (int)i, testCase.s, aNInfo.getErrors(), aNLInfo.getErrors(), buffer, buffer2); + continue; + } + } else { + if((aNLInfo.getErrors()&UIDNA_ERROR_LABEL_HAS_DOT)==0) { + errln("N.labelToASCII([%d] %s) errors %04lx missing UIDNA_ERROR_LABEL_HAS_DOT", + (int)i, testCase.s, (long)aNLInfo.getErrors()); + continue; + } + } + if(aT.indexOf((UChar)0x2e)<0) { + if(aT!=aTL || aTInfo.getErrors()!=aTLInfo.getErrors()) { + prettify(aT).extract(0, 0x7fffffff, buffer, LENGTHOF(buffer)); + prettify(aTL).extract(0, 0x7fffffff, buffer2, LENGTHOF(buffer2)); + errln("T.nameToASCII([%d] %s)!=T.labelToASCII() " + "(errors %04lx vs %04lx) %s vs. %s", + (int)i, testCase.s, aTInfo.getErrors(), aTLInfo.getErrors(), buffer, buffer2); + continue; + } + } else { + if((aTLInfo.getErrors()&UIDNA_ERROR_LABEL_HAS_DOT)==0) { + errln("T.labelToASCII([%d] %s) errors %04lx missing UIDNA_ERROR_LABEL_HAS_DOT", + (int)i, testCase.s, (long)aTLInfo.getErrors()); + continue; + } + } + if(uN.indexOf((UChar)0x2e)<0) { + if(uN!=uNL || uNInfo.getErrors()!=uNLInfo.getErrors()) { + prettify(uN).extract(0, 0x7fffffff, buffer, LENGTHOF(buffer)); + prettify(uNL).extract(0, 0x7fffffff, buffer2, LENGTHOF(buffer2)); + errln("N.nameToUnicode([%d] %s)!=N.labelToUnicode() " + "(errors %04lx vs %04lx) %s vs. %s", + (int)i, testCase.s, uNInfo.getErrors(), uNLInfo.getErrors(), buffer, buffer2); + continue; + } + } else { + if((uNLInfo.getErrors()&UIDNA_ERROR_LABEL_HAS_DOT)==0) { + errln("N.labelToUnicode([%d] %s) errors %04lx missing UIDNA_ERROR_LABEL_HAS_DOT", + (int)i, testCase.s, (long)uNLInfo.getErrors()); + continue; + } + } + if(uT.indexOf((UChar)0x2e)<0) { + if(uT!=uTL || uTInfo.getErrors()!=uTLInfo.getErrors()) { + prettify(uT).extract(0, 0x7fffffff, buffer, LENGTHOF(buffer)); + prettify(uTL).extract(0, 0x7fffffff, buffer2, LENGTHOF(buffer2)); + errln("T.nameToUnicode([%d] %s)!=T.labelToUnicode() " + "(errors %04lx vs %04lx) %s vs. %s", + (int)i, testCase.s, uTInfo.getErrors(), uTLInfo.getErrors(), buffer, buffer2); + continue; + } + } else { + if((uTLInfo.getErrors()&UIDNA_ERROR_LABEL_HAS_DOT)==0) { + errln("T.labelToUnicode([%d] %s) errors %04lx missing UIDNA_ERROR_LABEL_HAS_DOT", + (int)i, testCase.s, (long)uTLInfo.getErrors()); + continue; + } + } + // Differences between transitional and nontransitional processing + if(mode=='B') { + if( aNInfo.isTransitionalDifferent() || + aTInfo.isTransitionalDifferent() || + uNInfo.isTransitionalDifferent() || + uTInfo.isTransitionalDifferent() || + aNLInfo.isTransitionalDifferent() || + aTLInfo.isTransitionalDifferent() || + uNLInfo.isTransitionalDifferent() || + uTLInfo.isTransitionalDifferent() + ) { + errln("B.process([%d] %s) isTransitionalDifferent()", (int)i, testCase.s); + continue; + } + if( aN!=aT || uN!=uT || aNL!=aTL || uNL!=uTL || + aNInfo.getErrors()!=aTInfo.getErrors() || uNInfo.getErrors()!=uTInfo.getErrors() || + aNLInfo.getErrors()!=aTLInfo.getErrors() || uNLInfo.getErrors()!=uTLInfo.getErrors() + ) { + errln("N.process([%d] %s) vs. T.process() different errors or result strings", + (int)i, testCase.s); + continue; + } + } else { + if( !aNInfo.isTransitionalDifferent() || + !aTInfo.isTransitionalDifferent() || + !uNInfo.isTransitionalDifferent() || + !uTInfo.isTransitionalDifferent() || + !aNLInfo.isTransitionalDifferent() || + !aTLInfo.isTransitionalDifferent() || + !uNLInfo.isTransitionalDifferent() || + !uTLInfo.isTransitionalDifferent() + ) { + errln("%s.process([%d] %s) !isTransitionalDifferent()", + testCase.o, (int)i, testCase.s); + continue; + } + if(aN==aT || uN==uT || aNL==aTL || uNL==uTL) { + errln("N.process([%d] %s) vs. T.process() same result strings", + (int)i, testCase.s); + continue; + } + } + // UTF-8 if we have std::string +#if U_HAVE_STD_STRING + U_STD_NSQ string input8, aT8, uT8, aN8, uN8; + StringByteSink aT8Sink(&aT8), uT8Sink(&uT8), aN8Sink(&aN8), uN8Sink(&uN8); + IDNAInfo aT8Info, uT8Info, aN8Info, uN8Info; + input.toUTF8String(input8); + trans->nameToASCII_UTF8(input8, aT8Sink, aT8Info, errorCode); + trans->nameToUnicodeUTF8(input8, uT8Sink, uT8Info, errorCode); + nontrans->nameToASCII_UTF8(input8, aN8Sink, aN8Info, errorCode); + nontrans->nameToUnicodeUTF8(input8, uN8Sink, uN8Info, errorCode); + if(errorCode.logIfFailureAndReset("UTF-8 processing [%d/%s] %s", + (int)i, testCase.o, testCase.s) + ) { + continue; + } + UnicodeString aT16(UnicodeString::fromUTF8(aT8)); + UnicodeString uT16(UnicodeString::fromUTF8(uT8)); + UnicodeString aN16(UnicodeString::fromUTF8(aN8)); + UnicodeString uN16(UnicodeString::fromUTF8(uN8)); + if( aN8Info.getErrors()!=aNInfo.getErrors() || + uN8Info.getErrors()!=uNInfo.getErrors() + ) { + errln("N.xyzUTF8([%d] %s) vs. UTF-16 processing different errors %04lx vs. %04lx", + (int)i, testCase.s, + (long)aN8Info.getErrors(), (long)aNInfo.getErrors()); + continue; + } + if( aT8Info.getErrors()!=aTInfo.getErrors() || + uT8Info.getErrors()!=uTInfo.getErrors() + ) { + errln("T.xyzUTF8([%d] %s) vs. UTF-16 processing different errors %04lx vs. %04lx", + (int)i, testCase.s, + (long)aT8Info.getErrors(), (long)aTInfo.getErrors()); + continue; + } + if(aT16!=aT || uT16!=uT || aN16!=aN || uN16!=uN) { + errln("%s.xyzUTF8([%d] %s) vs. UTF-16 processing different string results", + testCase.o, (int)i, testCase.s, (long)aTInfo.getErrors()); + continue; + } + if( aT8Info.isTransitionalDifferent()!=aTInfo.isTransitionalDifferent() || + uT8Info.isTransitionalDifferent()!=uTInfo.isTransitionalDifferent() || + aN8Info.isTransitionalDifferent()!=aNInfo.isTransitionalDifferent() || + uN8Info.isTransitionalDifferent()!=uNInfo.isTransitionalDifferent() + ) { + errln("%s.xyzUTF8([%d] %s) vs. UTF-16 processing different isTransitionalDifferent()", + testCase.o, (int)i, testCase.s); + continue; + } +#endif + } +} + +#endif // UCONFIG_NO_IDNA