diff --git a/icu4c/source/common/unicode/ucnv.h b/icu4c/source/common/unicode/ucnv.h index 046f1379869..2b28567220c 100644 --- a/icu4c/source/common/unicode/ucnv.h +++ b/icu4c/source/common/unicode/ucnv.h @@ -86,9 +86,12 @@ typedef enum { } UConverterType; /** - * Enum for specifying which platform a converter ID refers to + * Enum for specifying which platform a converter ID refers to. + * The use of platform/CCSID is not recommended. See ucnv_openCCSID(). + * * @see ucnv_getPlatform * @see ucnv_openCCSID + * @see ucnv_getCCSID */ typedef enum { @@ -244,7 +247,51 @@ ucnv_openU (const UChar * name, UErrorCode * err); /** - * Creates a UConverter object from a CCSID number and platform pair + * Creates a UConverter object from a CCSID number and platform pair. + * Note that the usefulness of this function is limited to platforms with numeric + * encoding IDs. Only IBM and Microsoft platforms use numeric (16-bit) identifiers for + * encodings. + * + * In addition, IBM CCSIDs and Unicode conversion tables are not 1:1 related. + * For many IBM CCSIDs there are multiple (up to six) Unicode conversion tables, and + * for some Unicode conversion tables there are multiple CCSIDs. + * Some "alternate" Unicode conversion tables are provided by the + * IBM CDRA conversion table registry. + * The most prominent example of a systematic modification of conversion tables that is + * not provided in the form of conversion table files in the repository is + * that S/390 Unix System Services swaps the codes for Line Feed and New Line in all + * EBCDIC codepages, which requires such a swap in the Unicode conversion tables as well. + * + * Only IBM default conversion tables are accessible with ucnv_openCCSID(). + * ucnv_getCCSID() will return the same CCSID for all conversion tables that are associated + * with that CCSID. + * + * Currently, the only "platform" supported in the ICU converter API is UCNV_IBM. + * + * In summary, the use of CCSIDs and the associated API functions is not recommended. + * + * In order to open a converter with the default IBM CDRA Unicode conversion table, + * you can use this function or use the prefix "ibm-": + * \code + * char name[20]; + * sprintf(name, "ibm-%hu", ccsid); + * cnv=ucnv_open(name, &errorCode); + * \endcode + * + * In order to open a converter with the IBM S/390 Unix System Services variant of a Unicode/EBCDIC conversion table, + * you can use the prefix "ibm-" together with the suffix "-s390": + * \code + * char name[20]; + * sprintf(name, "ibm-%hu-s390", ccsid); + * cnv=ucnv_open(name, &errorCode); + * \endcode + * + * In order to open a converter from a Microsoft codepage number, use the prefix "cp": + * \code + * char name[20]; + * sprintf(name, "cp%hu", codepageID); + * cnv=ucnv_open(name, &errorCode); + * \endcode * * @param codepage codepage number to create * @param platform the platform in which the codepage number exists @@ -254,6 +301,8 @@ ucnv_openU (const UChar * name, * @see ucnv_open * @see ucnv_openU * @see ucnv_close + * @see ucnv_getCCSID + * @see ucnv_getPlatform * @see UConverterPlatform * @stable */ @@ -300,10 +349,6 @@ U_CAPI UConverter * * @see ucnv_openCCSID * @stable */ - - - - U_CAPI void U_EXPORT2 ucnv_close (UConverter * converter); @@ -487,10 +532,19 @@ ucnv_getName (const UConverter * converter, UErrorCode * err); * is available. * Does not check if the converter is NULL or if converter's data * table is NULL. + * + * Important: The use of CCSIDs is not recommended because it is limited + * to only two platforms in principle and only one (UCNV_IBM) in the current + * ICU converter API. + * Also, CCSIDs are insufficient to identify IBM Unicode conversion tables precisely. + * For more details see ucnv_openCCSID(). + * * @param converter the Unicode converter * @param err the error status code. * @return If any error occurrs, -1 will be returned otherwise, the codepage number * will be returned + * @see ucnv_openCCSID + * @see ucnv_getPlatform * @stable */ U_CAPI int32_t U_EXPORT2