12e5b6d6dSopenharmony_ci// © 2016 and later: Unicode, Inc. and others. 22e5b6d6dSopenharmony_ci// License & terms of use: http://www.unicode.org/copyright.html 32e5b6d6dSopenharmony_ci/* 42e5b6d6dSopenharmony_ci******************************************************************************* 52e5b6d6dSopenharmony_ci* Copyright (C) 2010-2012, International Business Machines 62e5b6d6dSopenharmony_ci* Corporation and others. All Rights Reserved. 72e5b6d6dSopenharmony_ci******************************************************************************* 82e5b6d6dSopenharmony_ci* file name: idna.h 92e5b6d6dSopenharmony_ci* encoding: UTF-8 102e5b6d6dSopenharmony_ci* tab size: 8 (not used) 112e5b6d6dSopenharmony_ci* indentation:4 122e5b6d6dSopenharmony_ci* 132e5b6d6dSopenharmony_ci* created on: 2010mar05 142e5b6d6dSopenharmony_ci* created by: Markus W. Scherer 152e5b6d6dSopenharmony_ci*/ 162e5b6d6dSopenharmony_ci 172e5b6d6dSopenharmony_ci#ifndef __IDNA_H__ 182e5b6d6dSopenharmony_ci#define __IDNA_H__ 192e5b6d6dSopenharmony_ci 202e5b6d6dSopenharmony_ci/** 212e5b6d6dSopenharmony_ci * \file 222e5b6d6dSopenharmony_ci * \brief C++ API: Internationalizing Domain Names in Applications (IDNA) 232e5b6d6dSopenharmony_ci */ 242e5b6d6dSopenharmony_ci 252e5b6d6dSopenharmony_ci#include "unicode/utypes.h" 262e5b6d6dSopenharmony_ci 272e5b6d6dSopenharmony_ci#if U_SHOW_CPLUSPLUS_API 282e5b6d6dSopenharmony_ci 292e5b6d6dSopenharmony_ci#if !UCONFIG_NO_IDNA 302e5b6d6dSopenharmony_ci 312e5b6d6dSopenharmony_ci#include "unicode/bytestream.h" 322e5b6d6dSopenharmony_ci#include "unicode/stringpiece.h" 332e5b6d6dSopenharmony_ci#include "unicode/uidna.h" 342e5b6d6dSopenharmony_ci#include "unicode/unistr.h" 352e5b6d6dSopenharmony_ci 362e5b6d6dSopenharmony_ciU_NAMESPACE_BEGIN 372e5b6d6dSopenharmony_ci 382e5b6d6dSopenharmony_ciclass IDNAInfo; 392e5b6d6dSopenharmony_ci 402e5b6d6dSopenharmony_ci/** 412e5b6d6dSopenharmony_ci * Abstract base class for IDNA processing. 422e5b6d6dSopenharmony_ci * See http://www.unicode.org/reports/tr46/ 432e5b6d6dSopenharmony_ci * and http://www.ietf.org/rfc/rfc3490.txt 442e5b6d6dSopenharmony_ci * 452e5b6d6dSopenharmony_ci * The IDNA class is not intended for public subclassing. 462e5b6d6dSopenharmony_ci * 472e5b6d6dSopenharmony_ci * This C++ API currently only implements UTS #46. 482e5b6d6dSopenharmony_ci * The uidna.h C API implements both UTS #46 (functions using UIDNA service object) 492e5b6d6dSopenharmony_ci * and IDNA2003 (functions that do not use a service object). 502e5b6d6dSopenharmony_ci * @stable ICU 4.6 512e5b6d6dSopenharmony_ci */ 522e5b6d6dSopenharmony_ciclass U_COMMON_API IDNA : public UObject { 532e5b6d6dSopenharmony_cipublic: 542e5b6d6dSopenharmony_ci /** 552e5b6d6dSopenharmony_ci * Destructor. 562e5b6d6dSopenharmony_ci * @stable ICU 4.6 572e5b6d6dSopenharmony_ci */ 582e5b6d6dSopenharmony_ci ~IDNA(); 592e5b6d6dSopenharmony_ci 602e5b6d6dSopenharmony_ci /** 612e5b6d6dSopenharmony_ci * Returns an IDNA instance which implements UTS #46. 622e5b6d6dSopenharmony_ci * Returns an unmodifiable instance, owned by the caller. 632e5b6d6dSopenharmony_ci * Cache it for multiple operations, and delete it when done. 642e5b6d6dSopenharmony_ci * The instance is thread-safe, that is, it can be used concurrently. 652e5b6d6dSopenharmony_ci * 662e5b6d6dSopenharmony_ci * UTS #46 defines Unicode IDNA Compatibility Processing, 672e5b6d6dSopenharmony_ci * updated to the latest version of Unicode and compatible with both 682e5b6d6dSopenharmony_ci * IDNA2003 and IDNA2008. 692e5b6d6dSopenharmony_ci * 702e5b6d6dSopenharmony_ci * The worker functions use transitional processing, including deviation mappings, 712e5b6d6dSopenharmony_ci * unless UIDNA_NONTRANSITIONAL_TO_ASCII or UIDNA_NONTRANSITIONAL_TO_UNICODE 722e5b6d6dSopenharmony_ci * is used in which case the deviation characters are passed through without change. 732e5b6d6dSopenharmony_ci * 742e5b6d6dSopenharmony_ci * Disallowed characters are mapped to U+FFFD. 752e5b6d6dSopenharmony_ci * 762e5b6d6dSopenharmony_ci * For available options see the uidna.h header. 772e5b6d6dSopenharmony_ci * Operations with the UTS #46 instance do not support the 782e5b6d6dSopenharmony_ci * UIDNA_ALLOW_UNASSIGNED option. 792e5b6d6dSopenharmony_ci * 802e5b6d6dSopenharmony_ci * By default, the UTS #46 implementation allows all ASCII characters (as valid or mapped). 812e5b6d6dSopenharmony_ci * When the UIDNA_USE_STD3_RULES option is used, ASCII characters other than 822e5b6d6dSopenharmony_ci * letters, digits, hyphen (LDH) and dot/full stop are disallowed and mapped to U+FFFD. 832e5b6d6dSopenharmony_ci * 842e5b6d6dSopenharmony_ci * @param options Bit set to modify the processing and error checking. 852e5b6d6dSopenharmony_ci * See option bit set values in uidna.h. 862e5b6d6dSopenharmony_ci * @param errorCode Standard ICU error code. Its input value must 872e5b6d6dSopenharmony_ci * pass the U_SUCCESS() test, or else the function returns 882e5b6d6dSopenharmony_ci * immediately. Check for U_FAILURE() on output or use with 892e5b6d6dSopenharmony_ci * function chaining. (See User Guide for details.) 902e5b6d6dSopenharmony_ci * @return the UTS #46 IDNA instance, if successful 912e5b6d6dSopenharmony_ci * @stable ICU 4.6 922e5b6d6dSopenharmony_ci */ 932e5b6d6dSopenharmony_ci static IDNA * 942e5b6d6dSopenharmony_ci createUTS46Instance(uint32_t options, UErrorCode &errorCode); 952e5b6d6dSopenharmony_ci 962e5b6d6dSopenharmony_ci /** 972e5b6d6dSopenharmony_ci * Converts a single domain name label into its ASCII form for DNS lookup. 982e5b6d6dSopenharmony_ci * If any processing step fails, then info.hasErrors() will be true and 992e5b6d6dSopenharmony_ci * the result might not be an ASCII string. 1002e5b6d6dSopenharmony_ci * The label might be modified according to the types of errors. 1012e5b6d6dSopenharmony_ci * Labels with severe errors will be left in (or turned into) their Unicode form. 1022e5b6d6dSopenharmony_ci * 1032e5b6d6dSopenharmony_ci * The UErrorCode indicates an error only in exceptional cases, 1042e5b6d6dSopenharmony_ci * such as a U_MEMORY_ALLOCATION_ERROR. 1052e5b6d6dSopenharmony_ci * 1062e5b6d6dSopenharmony_ci * @param label Input domain name label 1072e5b6d6dSopenharmony_ci * @param dest Destination string object 1082e5b6d6dSopenharmony_ci * @param info Output container of IDNA processing details. 1092e5b6d6dSopenharmony_ci * @param errorCode Standard ICU error code. Its input value must 1102e5b6d6dSopenharmony_ci * pass the U_SUCCESS() test, or else the function returns 1112e5b6d6dSopenharmony_ci * immediately. Check for U_FAILURE() on output or use with 1122e5b6d6dSopenharmony_ci * function chaining. (See User Guide for details.) 1132e5b6d6dSopenharmony_ci * @return dest 1142e5b6d6dSopenharmony_ci * @stable ICU 4.6 1152e5b6d6dSopenharmony_ci */ 1162e5b6d6dSopenharmony_ci virtual UnicodeString & 1172e5b6d6dSopenharmony_ci labelToASCII(const UnicodeString &label, UnicodeString &dest, 1182e5b6d6dSopenharmony_ci IDNAInfo &info, UErrorCode &errorCode) const = 0; 1192e5b6d6dSopenharmony_ci 1202e5b6d6dSopenharmony_ci /** 1212e5b6d6dSopenharmony_ci * Converts a single domain name label into its Unicode form for human-readable display. 1222e5b6d6dSopenharmony_ci * If any processing step fails, then info.hasErrors() will be true. 1232e5b6d6dSopenharmony_ci * The label might be modified according to the types of errors. 1242e5b6d6dSopenharmony_ci * 1252e5b6d6dSopenharmony_ci * The UErrorCode indicates an error only in exceptional cases, 1262e5b6d6dSopenharmony_ci * such as a U_MEMORY_ALLOCATION_ERROR. 1272e5b6d6dSopenharmony_ci * 1282e5b6d6dSopenharmony_ci * @param label Input domain name label 1292e5b6d6dSopenharmony_ci * @param dest Destination string object 1302e5b6d6dSopenharmony_ci * @param info Output container of IDNA processing details. 1312e5b6d6dSopenharmony_ci * @param errorCode Standard ICU error code. Its input value must 1322e5b6d6dSopenharmony_ci * pass the U_SUCCESS() test, or else the function returns 1332e5b6d6dSopenharmony_ci * immediately. Check for U_FAILURE() on output or use with 1342e5b6d6dSopenharmony_ci * function chaining. (See User Guide for details.) 1352e5b6d6dSopenharmony_ci * @return dest 1362e5b6d6dSopenharmony_ci * @stable ICU 4.6 1372e5b6d6dSopenharmony_ci */ 1382e5b6d6dSopenharmony_ci virtual UnicodeString & 1392e5b6d6dSopenharmony_ci labelToUnicode(const UnicodeString &label, UnicodeString &dest, 1402e5b6d6dSopenharmony_ci IDNAInfo &info, UErrorCode &errorCode) const = 0; 1412e5b6d6dSopenharmony_ci 1422e5b6d6dSopenharmony_ci /** 1432e5b6d6dSopenharmony_ci * Converts a whole domain name into its ASCII form for DNS lookup. 1442e5b6d6dSopenharmony_ci * If any processing step fails, then info.hasErrors() will be true and 1452e5b6d6dSopenharmony_ci * the result might not be an ASCII string. 1462e5b6d6dSopenharmony_ci * The domain name might be modified according to the types of errors. 1472e5b6d6dSopenharmony_ci * Labels with severe errors will be left in (or turned into) their Unicode form. 1482e5b6d6dSopenharmony_ci * 1492e5b6d6dSopenharmony_ci * The UErrorCode indicates an error only in exceptional cases, 1502e5b6d6dSopenharmony_ci * such as a U_MEMORY_ALLOCATION_ERROR. 1512e5b6d6dSopenharmony_ci * 1522e5b6d6dSopenharmony_ci * @param name Input domain name 1532e5b6d6dSopenharmony_ci * @param dest Destination string object 1542e5b6d6dSopenharmony_ci * @param info Output container of IDNA processing details. 1552e5b6d6dSopenharmony_ci * @param errorCode Standard ICU error code. Its input value must 1562e5b6d6dSopenharmony_ci * pass the U_SUCCESS() test, or else the function returns 1572e5b6d6dSopenharmony_ci * immediately. Check for U_FAILURE() on output or use with 1582e5b6d6dSopenharmony_ci * function chaining. (See User Guide for details.) 1592e5b6d6dSopenharmony_ci * @return dest 1602e5b6d6dSopenharmony_ci * @stable ICU 4.6 1612e5b6d6dSopenharmony_ci */ 1622e5b6d6dSopenharmony_ci virtual UnicodeString & 1632e5b6d6dSopenharmony_ci nameToASCII(const UnicodeString &name, UnicodeString &dest, 1642e5b6d6dSopenharmony_ci IDNAInfo &info, UErrorCode &errorCode) const = 0; 1652e5b6d6dSopenharmony_ci 1662e5b6d6dSopenharmony_ci /** 1672e5b6d6dSopenharmony_ci * Converts a whole domain name into its Unicode form for human-readable display. 1682e5b6d6dSopenharmony_ci * If any processing step fails, then info.hasErrors() will be true. 1692e5b6d6dSopenharmony_ci * The domain name might be modified according to the types of errors. 1702e5b6d6dSopenharmony_ci * 1712e5b6d6dSopenharmony_ci * The UErrorCode indicates an error only in exceptional cases, 1722e5b6d6dSopenharmony_ci * such as a U_MEMORY_ALLOCATION_ERROR. 1732e5b6d6dSopenharmony_ci * 1742e5b6d6dSopenharmony_ci * @param name Input domain name 1752e5b6d6dSopenharmony_ci * @param dest Destination string object 1762e5b6d6dSopenharmony_ci * @param info Output container of IDNA processing details. 1772e5b6d6dSopenharmony_ci * @param errorCode Standard ICU error code. Its input value must 1782e5b6d6dSopenharmony_ci * pass the U_SUCCESS() test, or else the function returns 1792e5b6d6dSopenharmony_ci * immediately. Check for U_FAILURE() on output or use with 1802e5b6d6dSopenharmony_ci * function chaining. (See User Guide for details.) 1812e5b6d6dSopenharmony_ci * @return dest 1822e5b6d6dSopenharmony_ci * @stable ICU 4.6 1832e5b6d6dSopenharmony_ci */ 1842e5b6d6dSopenharmony_ci virtual UnicodeString & 1852e5b6d6dSopenharmony_ci nameToUnicode(const UnicodeString &name, UnicodeString &dest, 1862e5b6d6dSopenharmony_ci IDNAInfo &info, UErrorCode &errorCode) const = 0; 1872e5b6d6dSopenharmony_ci 1882e5b6d6dSopenharmony_ci // UTF-8 versions of the processing methods ---------------------------- *** 1892e5b6d6dSopenharmony_ci 1902e5b6d6dSopenharmony_ci /** 1912e5b6d6dSopenharmony_ci * Converts a single domain name label into its ASCII form for DNS lookup. 1922e5b6d6dSopenharmony_ci * UTF-8 version of labelToASCII(), same behavior. 1932e5b6d6dSopenharmony_ci * 1942e5b6d6dSopenharmony_ci * @param label Input domain name label 1952e5b6d6dSopenharmony_ci * @param dest Destination byte sink; Flush()ed if successful 1962e5b6d6dSopenharmony_ci * @param info Output container of IDNA processing details. 1972e5b6d6dSopenharmony_ci * @param errorCode Standard ICU error code. Its input value must 1982e5b6d6dSopenharmony_ci * pass the U_SUCCESS() test, or else the function returns 1992e5b6d6dSopenharmony_ci * immediately. Check for U_FAILURE() on output or use with 2002e5b6d6dSopenharmony_ci * function chaining. (See User Guide for details.) 2012e5b6d6dSopenharmony_ci * @return dest 2022e5b6d6dSopenharmony_ci * @stable ICU 4.6 2032e5b6d6dSopenharmony_ci */ 2042e5b6d6dSopenharmony_ci virtual void 2052e5b6d6dSopenharmony_ci labelToASCII_UTF8(StringPiece label, ByteSink &dest, 2062e5b6d6dSopenharmony_ci IDNAInfo &info, UErrorCode &errorCode) const; 2072e5b6d6dSopenharmony_ci 2082e5b6d6dSopenharmony_ci /** 2092e5b6d6dSopenharmony_ci * Converts a single domain name label into its Unicode form for human-readable display. 2102e5b6d6dSopenharmony_ci * UTF-8 version of labelToUnicode(), same behavior. 2112e5b6d6dSopenharmony_ci * 2122e5b6d6dSopenharmony_ci * @param label Input domain name label 2132e5b6d6dSopenharmony_ci * @param dest Destination byte sink; Flush()ed if successful 2142e5b6d6dSopenharmony_ci * @param info Output container of IDNA processing details. 2152e5b6d6dSopenharmony_ci * @param errorCode Standard ICU error code. Its input value must 2162e5b6d6dSopenharmony_ci * pass the U_SUCCESS() test, or else the function returns 2172e5b6d6dSopenharmony_ci * immediately. Check for U_FAILURE() on output or use with 2182e5b6d6dSopenharmony_ci * function chaining. (See User Guide for details.) 2192e5b6d6dSopenharmony_ci * @return dest 2202e5b6d6dSopenharmony_ci * @stable ICU 4.6 2212e5b6d6dSopenharmony_ci */ 2222e5b6d6dSopenharmony_ci virtual void 2232e5b6d6dSopenharmony_ci labelToUnicodeUTF8(StringPiece label, ByteSink &dest, 2242e5b6d6dSopenharmony_ci IDNAInfo &info, UErrorCode &errorCode) const; 2252e5b6d6dSopenharmony_ci 2262e5b6d6dSopenharmony_ci /** 2272e5b6d6dSopenharmony_ci * Converts a whole domain name into its ASCII form for DNS lookup. 2282e5b6d6dSopenharmony_ci * UTF-8 version of nameToASCII(), same behavior. 2292e5b6d6dSopenharmony_ci * 2302e5b6d6dSopenharmony_ci * @param name Input domain name 2312e5b6d6dSopenharmony_ci * @param dest Destination byte sink; Flush()ed if successful 2322e5b6d6dSopenharmony_ci * @param info Output container of IDNA processing details. 2332e5b6d6dSopenharmony_ci * @param errorCode Standard ICU error code. Its input value must 2342e5b6d6dSopenharmony_ci * pass the U_SUCCESS() test, or else the function returns 2352e5b6d6dSopenharmony_ci * immediately. Check for U_FAILURE() on output or use with 2362e5b6d6dSopenharmony_ci * function chaining. (See User Guide for details.) 2372e5b6d6dSopenharmony_ci * @return dest 2382e5b6d6dSopenharmony_ci * @stable ICU 4.6 2392e5b6d6dSopenharmony_ci */ 2402e5b6d6dSopenharmony_ci virtual void 2412e5b6d6dSopenharmony_ci nameToASCII_UTF8(StringPiece name, ByteSink &dest, 2422e5b6d6dSopenharmony_ci IDNAInfo &info, UErrorCode &errorCode) const; 2432e5b6d6dSopenharmony_ci 2442e5b6d6dSopenharmony_ci /** 2452e5b6d6dSopenharmony_ci * Converts a whole domain name into its Unicode form for human-readable display. 2462e5b6d6dSopenharmony_ci * UTF-8 version of nameToUnicode(), same behavior. 2472e5b6d6dSopenharmony_ci * 2482e5b6d6dSopenharmony_ci * @param name Input domain name 2492e5b6d6dSopenharmony_ci * @param dest Destination byte sink; Flush()ed if successful 2502e5b6d6dSopenharmony_ci * @param info Output container of IDNA processing details. 2512e5b6d6dSopenharmony_ci * @param errorCode Standard ICU error code. Its input value must 2522e5b6d6dSopenharmony_ci * pass the U_SUCCESS() test, or else the function returns 2532e5b6d6dSopenharmony_ci * immediately. Check for U_FAILURE() on output or use with 2542e5b6d6dSopenharmony_ci * function chaining. (See User Guide for details.) 2552e5b6d6dSopenharmony_ci * @return dest 2562e5b6d6dSopenharmony_ci * @stable ICU 4.6 2572e5b6d6dSopenharmony_ci */ 2582e5b6d6dSopenharmony_ci virtual void 2592e5b6d6dSopenharmony_ci nameToUnicodeUTF8(StringPiece name, ByteSink &dest, 2602e5b6d6dSopenharmony_ci IDNAInfo &info, UErrorCode &errorCode) const; 2612e5b6d6dSopenharmony_ci}; 2622e5b6d6dSopenharmony_ci 2632e5b6d6dSopenharmony_ciclass UTS46; 2642e5b6d6dSopenharmony_ci 2652e5b6d6dSopenharmony_ci/** 2662e5b6d6dSopenharmony_ci * Output container for IDNA processing errors. 2672e5b6d6dSopenharmony_ci * The IDNAInfo class is not suitable for subclassing. 2682e5b6d6dSopenharmony_ci * @stable ICU 4.6 2692e5b6d6dSopenharmony_ci */ 2702e5b6d6dSopenharmony_ciclass U_COMMON_API IDNAInfo : public UMemory { 2712e5b6d6dSopenharmony_cipublic: 2722e5b6d6dSopenharmony_ci /** 2732e5b6d6dSopenharmony_ci * Constructor for stack allocation. 2742e5b6d6dSopenharmony_ci * @stable ICU 4.6 2752e5b6d6dSopenharmony_ci */ 2762e5b6d6dSopenharmony_ci IDNAInfo() : errors(0), labelErrors(0), isTransDiff(false), isBiDi(false), isOkBiDi(true) {} 2772e5b6d6dSopenharmony_ci /** 2782e5b6d6dSopenharmony_ci * Were there IDNA processing errors? 2792e5b6d6dSopenharmony_ci * @return true if there were processing errors 2802e5b6d6dSopenharmony_ci * @stable ICU 4.6 2812e5b6d6dSopenharmony_ci */ 2822e5b6d6dSopenharmony_ci UBool hasErrors() const { return errors!=0; } 2832e5b6d6dSopenharmony_ci /** 2842e5b6d6dSopenharmony_ci * Returns a bit set indicating IDNA processing errors. 2852e5b6d6dSopenharmony_ci * See UIDNA_ERROR_... constants in uidna.h. 2862e5b6d6dSopenharmony_ci * @return bit set of processing errors 2872e5b6d6dSopenharmony_ci * @stable ICU 4.6 2882e5b6d6dSopenharmony_ci */ 2892e5b6d6dSopenharmony_ci uint32_t getErrors() const { return errors; } 2902e5b6d6dSopenharmony_ci /** 2912e5b6d6dSopenharmony_ci * Returns true if transitional and nontransitional processing produce different results. 2922e5b6d6dSopenharmony_ci * This is the case when the input label or domain name contains 2932e5b6d6dSopenharmony_ci * one or more deviation characters outside a Punycode label (see UTS #46). 2942e5b6d6dSopenharmony_ci * <ul> 2952e5b6d6dSopenharmony_ci * <li>With nontransitional processing, such characters are 2962e5b6d6dSopenharmony_ci * copied to the destination string. 2972e5b6d6dSopenharmony_ci * <li>With transitional processing, such characters are 2982e5b6d6dSopenharmony_ci * mapped (sharp s/sigma) or removed (joiner/nonjoiner). 2992e5b6d6dSopenharmony_ci * </ul> 3002e5b6d6dSopenharmony_ci * @return true if transitional and nontransitional processing produce different results 3012e5b6d6dSopenharmony_ci * @stable ICU 4.6 3022e5b6d6dSopenharmony_ci */ 3032e5b6d6dSopenharmony_ci UBool isTransitionalDifferent() const { return isTransDiff; } 3042e5b6d6dSopenharmony_ci 3052e5b6d6dSopenharmony_ciprivate: 3062e5b6d6dSopenharmony_ci friend class UTS46; 3072e5b6d6dSopenharmony_ci 3082e5b6d6dSopenharmony_ci IDNAInfo(const IDNAInfo &other) = delete; // no copying 3092e5b6d6dSopenharmony_ci IDNAInfo &operator=(const IDNAInfo &other) = delete; // no copying 3102e5b6d6dSopenharmony_ci 3112e5b6d6dSopenharmony_ci void reset() { 3122e5b6d6dSopenharmony_ci errors=labelErrors=0; 3132e5b6d6dSopenharmony_ci isTransDiff=false; 3142e5b6d6dSopenharmony_ci isBiDi=false; 3152e5b6d6dSopenharmony_ci isOkBiDi=true; 3162e5b6d6dSopenharmony_ci } 3172e5b6d6dSopenharmony_ci 3182e5b6d6dSopenharmony_ci uint32_t errors, labelErrors; 3192e5b6d6dSopenharmony_ci UBool isTransDiff; 3202e5b6d6dSopenharmony_ci UBool isBiDi; 3212e5b6d6dSopenharmony_ci UBool isOkBiDi; 3222e5b6d6dSopenharmony_ci}; 3232e5b6d6dSopenharmony_ci 3242e5b6d6dSopenharmony_ciU_NAMESPACE_END 3252e5b6d6dSopenharmony_ci 3262e5b6d6dSopenharmony_ci#endif // UCONFIG_NO_IDNA 3272e5b6d6dSopenharmony_ci 3282e5b6d6dSopenharmony_ci#endif /* U_SHOW_CPLUSPLUS_API */ 3292e5b6d6dSopenharmony_ci 3302e5b6d6dSopenharmony_ci#endif // __IDNA_H__ 331