iconv_cnv.hpp
上传用户:huihehuasu
上传日期:2007-01-10
资源大小:6948k
文件大小:15k
源码类别:

xml/soap/webservice

开发平台:

C/C++

  1. /*
  2.  * The Apache Software License, Version 1.1
  3.  *
  4.  * Copyright (c) 1999-2001 The Apache Software Foundation.  All rights
  5.  * reserved.
  6.  *
  7.  * Redistribution and use in source and binary forms, with or without
  8.  * modification, are permitted provided that the following conditions
  9.  * are met:
  10.  *
  11.  * 1. Redistributions of source code must retain the above copyright
  12.  *    notice, this list of conditions and the following disclaimer.
  13.  *
  14.  * 2. Redistributions in binary form must reproduce the above copyright
  15.  *    notice, this list of conditions and the following disclaimer in
  16.  *    the documentation and/or other materials provided with the
  17.  *    distribution.
  18.  *
  19.  * 3. The end-user documentation included with the redistribution,
  20.  *    if any, must include the following acknowledgment:
  21.  *       "This product includes software developed by the
  22.  *        Apache Software Foundation (http://www.apache.org/)."
  23.  *    Alternately, this acknowledgment may appear in the software itself,
  24.  *    if and wherever such third-party acknowledgments normally appear.
  25.  *
  26.  * 4. The names "Xerces" and "Apache Software Foundation" must
  27.  *    not be used to endorse or promote products derived from this
  28.  *    software without prior written permission. For written
  29.  *    permission, please contact apache@apache.org.
  30.  *
  31.  * 5. Products derived from this software may not be called "Apache",
  32.  *    nor may "Apache" appear in their name, without prior written
  33.  *    permission of the Apache Software Foundation.
  34.  *
  35.  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  36.  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  37.  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  38.  * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
  39.  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  40.  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  41.  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  42.  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  43.  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  44.  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  45.  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  46.  * SUCH DAMAGE.
  47.  * ====================================================================
  48.  *
  49.  * This software consists of voluntary contributions made by many
  50.  * individuals on behalf of the Apache Software Foundation, and was
  51.  * originally based on software copyright (c) 1999, International
  52.  * Business Machines, Inc., http://www.ibm.com .  For more information
  53.  * on the Apache Software Foundation, please see
  54.  * <http://www.apache.org/>.
  55.  */
  56. /**
  57.  * $Log: iconv_cnv.hpp,v $
  58.  * Revision 1.1  2001/06/25 16:19:34  tng
  59.  * Rename iconv_cnv.h to iconv_cnv.hpp.  AS400 changes by Linda Swan.
  60.  *
  61.  * Revision 1.1  2000/02/10 18:08:28  abagchi
  62.  * Initial checkin
  63.  *
  64.  */
  65. #ifndef UCNV_H
  66. #define UCNV_H
  67. #include "utypes.h"
  68. /**
  69.  * Creates a UConverter object with the names specified as a C string.
  70.  * The actual name will be resolved with the alias file.
  71.  * if <TT>NULL</TT> is passed for the converter name, it will create one with the
  72.  * getDefaultName return value.
  73.  * @param converterName : name of the uconv table
  74.  * @param err outgoing error status <TT>MEMORY_ALLOCATION_ERROR, TABLE_NOT_FOUND</TT>
  75.  * @return the created Unicode converter object, or <TT>NULL</TT> if an error occured
  76.  * @see ucnv_openU
  77.  * @see ucnv_openCCSID
  78.  * @see ucnv_close
  79.  */
  80. U_CAPI
  81. UConverter* U_EXPORT2 ucnv_open   (const char *converterName,
  82.    UErrorCode * err);
  83. /**
  84.  * Creates a Unicode converter with the names specified as unicode string. The name should be limited to
  85.  * the ASCII-7 alphanumerics range. The actual name will be resolved with the alias file.
  86.  * if <TT>NULL</TT> is passed for the converter name, it will create one with the
  87.  * getDefaultName return value.
  88.  * @param converterName : name of the uconv table in a zero terminated Unicode string
  89.  * @param err outgoing error status <TT>MEMORY_ALLOCATION_ERROR, TABLE_NOT_FOUND</TT>
  90.  * @return the created Unicode converter object, or <TT>NULL</TT> if an error occured
  91.  * @see ucnv_open
  92.  * @see ucnv_openCCSID
  93.  * @see ucnv_close
  94.  */
  95. U_CAPI UConverter* U_EXPORT2 ucnv_openU (const UChar * name,
  96.        UErrorCode * err);
  97. /**
  98.  * Creates a UConverter object using a CCSID number.
  99.  * @param codepage : codepage # of the uconv table
  100.  * @param platform : codepage's platform (now only <TT>IBM</TT> supported)
  101.  * @param err error status <TT>MEMORY_ALLOCATION_ERROR, TABLE_NOT_FOUND</TT>
  102.  * @return the created Unicode converter object, or <TT>NULL</TT> if and error occured
  103.  * @see ucnv_open
  104.  * @see ucnv_openU
  105.  * @see ucnv_close
  106.  */
  107. U_CAPI void  U_EXPORT2 ucnv_close (UConverter * converter);
  108. /**
  109.  * Returns the maximum length of bytes used by a character. This varies between 1 and 4
  110.  * @param converter the Unicode converter
  111.  * @return the maximum number of bytes allowed by this particular converter
  112.  * @see ucnv_getMinCharSize
  113.  */
  114. U_CAPI int8_t U_EXPORT2
  115.     ucnv_getMaxCharSize (const UConverter * converter);
  116. /**
  117.  * Returns the minimum byte length for characters in this codepage. This is either
  118.  * 1 or 2 for all supported codepages.
  119.  * @param converter the Unicode converter
  120.  * @return the minimum number of bytes allowed by this particular converter
  121.  * @see ucnv_getMaxCharSize
  122.  */
  123. U_CAPI int8_t U_EXPORT2
  124.     ucnv_getMinCharSize (const UConverter * converter);
  125. /**
  126.  * Transcodes an array of unicode characters to an array of codepage characters.
  127.  * The source pointer is an I/O parameter, it starts out pointing where the function is
  128.  * to begin transcoding, and ends up pointing after the first sequence of the bytes
  129.  * that it encounters that are semantically invalid.
  130.  * if ucnv_setToUCallBack is called with an action other than <TT>STOP</TT>
  131.  * before a call is made to this API, <TT>consumed</TT> and <TT>source</TT> should point to the same place
  132.  * (unless <TT>target</TT> ends with an imcomplete sequence of bytes and <TT>flush</TT> is <TT>FALSE</TT>).
  133.  * the <TT>target</TT> buffer buffer needs to be a least the size of the maximum # of bytes per characters
  134.  * allowed by the target codepage.
  135.  * @param converter the Unicode converter
  136.  * @param converter the Unicode converter
  137.  * @param target : I/O parameter. Input : Points to the beginning of the buffer to copy
  138.  *  codepage characters to. Output : points to after the last codepage character copied
  139.  *  to <TT>target</TT>.
  140.  * @param targetLimit the pointer to the end of the <TT>target</TT> array
  141.  * @param source the source Unicode character array
  142.  * @param sourceLimit the pointer to the end of the source array
  143.  * @param offsets if NULL is passed, nothing will happen to it, otherwise it needs to have the same number
  144.  * of allocated cells as <TT>target</TT>. Will fill in offsets from target to source pointer
  145.  * e.g: <TT>offsets[3]</TT> is equal to 6, it means that the <TT>target[3]</TT> was a result of transcoding <TT>source[6]</TT>
  146.  * For output data carried across calls -1 will be placed for offsets.
  147.  * @param flush <TT>TRUE</TT> if the buffer is the last buffer of the conversion interation
  148.  * and the conversion will finish with this call, FALSE otherwise.
  149.  * @param err the error status.  <TT>ILLEGAL_ARGUMENT_ERROR</TT> will be returned if the
  150.  * converter is <TT>NULL</TT>.
  151.  * @see ucnv_fromUChars
  152.  * @see ucnv_convert
  153.  * @see ucnv_getMinCharSize
  154.  * @see ucnv_setToUCallBack
  155.  */
  156. U_CAPI
  157.   void U_EXPORT2 ucnv_fromUnicode (UConverter * converter,
  158.  char **target,
  159.  const char *targetLimit,
  160.  const UChar ** source,
  161.  const UChar * sourceLimit,
  162.  int32_t* offsets,
  163.  int flush,
  164.  UErrorCode * err);
  165. /**
  166.  * Converts an array of codepage characters into an array of unicode characters.
  167.  * The source pointer is an I/O parameter, it starts out pointing at the place
  168.  * to begin translating, and ends up pointing after the first sequence of the bytes
  169.  * that it encounters that are semantically invalid.
  170.  * if ucnv_setFromUCallBack is called with an action other than STOP
  171.  * before a call is made to this API, consumed and source should point to the same place
  172.  * (unless target ends with an imcomplete sequence of bytes and flush is FALSE).
  173.  * @param converter the Unicode converter
  174.  * @param target : I/O parameter. Input : Points to the beginning of the buffer to copy
  175.  *  Unicode characters to. Output : points to after the last UChar copied to target.
  176.  * @param targetLimit the pointer to the end of the target array
  177.  * @param source the source codepage character array
  178.  * @param sourceLimit the pointer to the end of the source array
  179.  * @param offsets if NULL is passed, nothing will happen to it, otherwise it needs to have the same number
  180.  * of allocated cells as <TT>target</TT>. Will fill in offsets from target to source pointer
  181.  * e.g: <TT>offsets[3]</TT> is equal to 6, it means that the <TT>target[3]</TT> was a result of transcoding <TT>source[6]</TT>
  182.  * For output data carried across calls -1 will be placed for offsets.
  183.  * @param flush TRUE if the buffer is the last buffer and the conversion will finish
  184.  * in this call, FALSE otherwise.
  185.  * @param err the error code status  <TT>ILLEGAL_ARGUMENT_ERROR</TT> will be returned if the
  186.  * converter is <TT>NULL</TT>, or if <TT>targetLimit</TT> and <TT>sourceLimit</TT> are misaligned.
  187.  * @see ucnv_toUChars
  188.  * @see ucnv_getNextUChar
  189.  * @see ucnv_convert
  190.  * @see ucnv_setFromUCallBack
  191.  */
  192. U_CAPI
  193.   void U_EXPORT2 ucnv_toUnicode (UConverter * converter,
  194.        UChar ** target,
  195.        const UChar * targetLimit,
  196.        const char **source,
  197.        const char *sourceLimit,
  198.        int32_t* offsets,
  199.        int flush,
  200.        UErrorCode * err);
  201. /**
  202.  * Transcodes the source Unicode string to the target string in a codepage encoding
  203.  * with the specified Unicode converter.  For example, if a Unicode to/from JIS
  204.  * converter is specified, the source string in Unicode will be transcoded to JIS
  205.  * encoding.  The result will be stored in JIS encoding.
  206.  * if any problems during conversion are encountered it will SUBSTITUTE with the default (initial)
  207.  * substitute characters.
  208.  * This function is a more convenient but less efficient version of Ref{ucnv_fromUnicode}.
  209.  * @param converter the Unicode converter
  210.  * @param source the <TT>source</TT> Unicode string (zero Terminated)
  211.  * @param target the <TT>target</TT> string in codepage encoding (<STRONG>not zero-terminated</STRONG> because some
  212.  * codepage do not use '' as a string terminator
  213.  * @param targetCapacity Input the number of bytes available in the <TT>target</TT> buffer
  214.  * @param err the error status code.
  215.  * <TT>INDEX_OUTOFBOUNDS_ERROR</TT> will be returned if the
  216.  * the # of bytes provided are not enough for transcoding.
  217.  * <TT>ILLEGAL_ARGUMENT_ERROR</TT> is returned if the converter is <TT>NULL</TT> or the source or target string is empty.
  218.  * <TT>BUFFER_OVERFLOW_ERROR</TT> when <TT>targetSize</TT> turns out to be bigger than <TT>targetCapacity</TT>
  219.  * @return number of bytes needed in target, regardless of <TT>targetCapacity</TT>
  220.  * @see ucnv_fromUnicode
  221.  * @see ucnv_convert
  222.  */
  223. U_CAPI
  224.   int32_t U_EXPORT2 ucnv_fromUChars (const UConverter * converter,
  225.    char *target,
  226.    int32_t targetCapacity,
  227.    const UChar * source,
  228.    UErrorCode * err);
  229. /**
  230.  * Transcode the source string in codepage encoding to the target string in
  231.  * Unicode encoding.  For example, if a Unicode to/from JIS
  232.  * converter is specified, the source string in JIS encoding will be transcoded
  233.  * to Unicode and placed into a provided target buffer.
  234.  * if any problems during conversion are encountered it will SUBSTITUTE with the Unicode REPLACEMENT char
  235.  * We recomment, the size of the target buffer needs to be at least as long as the maximum # of bytes per char
  236.  * in this character set.
  237.  * A zero-terminator will be placed at the end of the target buffer
  238.  * This function is a more convenient but less efficient version of Ref{ucnv_toUnicode}.
  239.  * @param converter the Unicode converter
  240.  * @param source the source string in codepage encoding
  241.  * @param target the target string in Unicode encoding
  242.  * @param targetCapacity capacity of the target buffer
  243.  * @param sourceSize : Number of bytes in <TT>source</TT> to be transcoded
  244.  * @param err the error status code
  245.  * <TT>MEMORY_ALLOCATION_ERROR</TT> will be returned if the
  246.  * the internal process buffer cannot be allocated for transcoding.
  247.  * <TT>ILLEGAL_ARGUMENT_ERROR</TT> is returned if the converter is <TT>NULL</TT> or
  248.  * if the source or target string is empty.
  249.  * <TT>BUFFER_OVERFLOW_ERROR</TT> when the input buffer is prematurely exhausted and targetSize non-<TT>NULL</TT>.
  250.  * @return the number of UChar needed in target (including the zero terminator)
  251.  * @see ucnv_getNextUChar
  252.  * @see ucnv_toUnicode
  253.  * @see ucnv_convert
  254.  */
  255. U_CAPI
  256.   int32_t U_EXPORT2 ucnv_toUChars (const UConverter * converter,
  257.  UChar * target,
  258.  int32_t targetCapacity,
  259.  const char *source,
  260.  int32_t sourceSize,
  261.  UErrorCode * err);
  262. /********************************
  263.  * Will convert a codepage buffer one character at a time.
  264.  * This function was written to be efficient when transcoding small amounts of data at a time.
  265.  * In that case it will be more efficient than Ref{ucnv_toUnicode}.
  266.  * When converting large buffers use Ref{ucnv_toUnicode}.
  267.  *@param converter an open UConverter
  268.  *@param source the address of a pointer to the codepage buffer, will be updated to point after
  269.  *the bytes consumed in the conversion call.
  270.  *@param points to the end of the input buffer
  271.  *@param err fills in error status (see ucnv_toUnicode)
  272.  *@return a UChar resulting from the partial conversion of source
  273.  *@see ucnv_toUnicode
  274.  *@see ucnv_toUChars
  275.  *@see ucnv_convert
  276.  */
  277. U_CAPI
  278.   UChar U_EXPORT2 ucnv_getNextUChar (UConverter * converter,
  279.    const char **source,
  280.    const char *sourceLimit,
  281.    UErrorCode * err);
  282. /**************************
  283. * Will convert a sequence of bytes from one codepage to another.
  284. * This is <STRONG>NOT AN EFFICIENT</STRONG> way to transcode.
  285. * use Ref{ucnv_toUnicode} and Ref{ucnv_fromUnicode} for efficiency
  286. * @param toConverterName: The name of the converter that will be used to encode the output buffer
  287. * @param fromConverterName: The name of the converter that will be used to decode the input buffer
  288. * @param target: Pointer to the output buffer to write to
  289. * @param targetCapacity: on input contains the capacity of target
  290. * @param source: Pointer to the input buffer
  291. * @param sourceLength: on input contains the capacity of source
  292. * @param err: fills in an error status
  293. * @return  will be filled in with the number of bytes needed in target
  294. * @see ucnv_fromUnicode
  295. * @see ucnv_toUnicode
  296. * @see ucnv_fromUChars
  297. * @see ucnv_toUChars
  298. * @see ucnv_getNextUChar
  299. */
  300. U_CAPI
  301.   int32_t U_EXPORT2 ucnv_convert (const char *toConverterName,
  302. const char *fromConverterName,
  303. char *target,
  304. int32_t targetCapacity,
  305. const char *source,
  306. int32_t sourceLength,
  307. UErrorCode * err);
  308. #endif