GIF89a;
format | default printf type | default scanf type | description |
%E | double | float | Scientific with an uppercase exponent |
%e | double | float | Scientific with a lowercase exponent |
%G | double | float | Use %E or %f for best format |
%g | double | float | Use %e or %f for best format |
%f | double | float | Simple floating point without the exponent |
%X | int32_t | int32_t | ustdio special uppercase hex radix formatting |
%x | int32_t | int32_t | ustdio special lowercase hex radix formatting |
%d | int32_t | int32_t | Decimal format |
%i | int32_t | int32_t | Same as %d |
%n | int32_t | int32_t | count (write the number of UTF-16 codeunits read/written) |
%o | int32_t | int32_t | ustdio special octal radix formatting |
%u | uint32_t | uint32_t | Decimal format |
%p | void * | void * | Prints the pointer value |
%s | char * | char * | Use default converter or specified converter from fopen |
%c | char | char | Use default converter or specified converter from fopen When width is specified for scanf, this acts like a non-NULL-terminated char * string. By default, only one char is written. |
%S | UChar * | UChar * | Null terminated UTF-16 string |
%C | UChar | UChar | 16-bit Unicode code unit When width is specified for scanf, this acts like a non-NULL-terminated UChar * string By default, only one codepoint is written. |
%[] | UChar * | Null terminated UTF-16 string which contains the filtered set of characters specified by the UnicodeSet | |
%% | Show a percent sign |
modifier | formats | type | comments |
%h | %d, %i, %o, %x | int16_t | short format |
%h | %u | uint16_t | short format |
%h | c | char | (Unimplemented) Use invariant converter |
%h | s | char * | (Unimplemented) Use invariant converter |
%h | C | char | (Unimplemented) 8-bit Unicode code unit |
%h | S | char * | (Unimplemented) Null terminated UTF-8 string |
%l | %d, %i, %o, %x | int32_t | long format (no effect) |
%l | %u | uint32_t | long format (no effect) |
%l | c | N/A | (Unimplemented) Reserved for future implementation |
%l | s | N/A | (Unimplemented) Reserved for future implementation |
%l | C | UChar32 | (Unimplemented) 32-bit Unicode code unit |
%l | S | UChar32 * | (Unimplemented) Null terminated UTF-32 string |
%ll | %d, %i, %o, %x | int64_t | long long format |
%ll | %u | uint64_t | (Unimplemented) long long format |
%- | all | N/A | Left justify |
%+ | %d, %i, %o, %x, %e, %f, %g, %E, %G | N/A | Always show the plus or minus sign. Needs data for plus sign. |
% | %d, %i, %o, %x, %e, %f, %g, %E, %G | N/A | Instead of a "+" output a blank character for positive numbers. |
%# | %d, %i, %o, %x, %e, %f, %g, %E, %G | N/A | Precede octal value with 0, hex with 0x and show the decimal point for floats. |
%n | all | N/A | Width of input/output. num is an actual number from 0 to some large number. |
%.n | %e, %f, %g, %E, %F, %G | N/A | Significant digits precision. num is an actual number from
0 to some large number. If * is used in printf, then the precision is passed in as an argument before the number to be formatted. |
If you are using this C API instead of the ustream.h API for C++, you can use one of the following u_fprintf examples to display a UnicodeString.
UFILE *out = u_finit(stdout, NULL, NULL);
UnicodeString string1("string 1");
UnicodeString string2("string 2");
u_fprintf(out, "%S\n", string1.getTerminatedBuffer());
u_fprintf(out, "%.*S\n", string2.length(), string2.getBuffer());
u_fclose(out);
*/
/**
* When an end of file is encountered, this value can be returned.
* @see u_fgetc
* @stable 3.0
*/
#define U_EOF 0xFFFF
/** Forward declaration of a Unicode-aware file @stable 3.0 */
typedef struct UFILE UFILE;
/**
* Enum for which direction of stream a transliterator applies to.
* @see u_fsettransliterator
* @stable ICU 3.0
*/
typedef enum {
U_READ = 1,
U_WRITE = 2,
U_READWRITE =3 /* == (U_READ | U_WRITE) */
} UFileDirection;
/**
* Open a UFILE.
* A UFILE is a wrapper around a FILE* that is locale and codepage aware.
* That is, data written to a UFILE will be formatted using the conventions
* specified by that UFILE's Locale; this data will be in the character set
* specified by that UFILE's codepage.
* @param filename The name of the file to open.
* @param perm The read/write permission for the UFILE; one of "r", "w", "rw"
* @param locale The locale whose conventions will be used to format
* and parse output. If this parameter is NULL, the default locale will
* be used.
* @param codepage The codepage in which data will be written to and
* read from the file. If this paramter is NULL the system default codepage
* will be used.
* @return A new UFILE, or NULL if an error occurred.
* @stable ICU 3.0
*/
U_STABLE UFILE* U_EXPORT2
u_fopen(const char *filename,
const char *perm,
const char *locale,
const char *codepage);
/**
* Open a UFILE on top of an existing FILE* stream. The FILE* stream
* ownership remains with the caller. To have the UFILE take over
* ownership and responsibility for the FILE* stream, use the
* function u_fadopt.
* @param f The FILE* to which this UFILE will attach and use.
* @param locale The locale whose conventions will be used to format
* and parse output. If this parameter is NULL, the default locale will
* be used.
* @param codepage The codepage in which data will be written to and
* read from the file. If this paramter is NULL, data will be written and
* read using the default codepage for locale, unless locale
* is NULL, in which case the system default codepage will be used.
* @return A new UFILE, or NULL if an error occurred.
* @stable ICU 3.0
*/
U_STABLE UFILE* U_EXPORT2
u_finit(FILE *f,
const char *locale,
const char *codepage);
/**
* Open a UFILE on top of an existing FILE* stream. The FILE* stream
* ownership is transferred to the new UFILE. It will be closed when the
* UFILE is closed.
* @param f The FILE* which this UFILE will take ownership of.
* @param locale The locale whose conventions will be used to format
* and parse output. If this parameter is NULL, the default locale will
* be used.
* @param codepage The codepage in which data will be written to and
* read from the file. If this paramter is NULL, data will be written and
* read using the default codepage for locale, unless locale
* is NULL, in which case the system default codepage will be used.
* @return A new UFILE, or NULL if an error occurred. If an error occurs
* the ownership of the FILE* stream remains with the caller.
* @stable ICU 4.4
*/
U_STABLE UFILE* U_EXPORT2
u_fadopt(FILE *f,
const char *locale,
const char *codepage);
/**
* Create a UFILE that can be used for localized formatting or parsing.
* The u_sprintf and u_sscanf functions do not read or write numbers for a
* specific locale. The ustdio.h file functions can be used on this UFILE.
* The string is usable once u_fclose or u_fflush has been called on the
* returned UFILE.
* @param stringBuf The string used for reading or writing.
* @param capacity The number of code units available for use in stringBuf
* @param locale The locale whose conventions will be used to format
* and parse output. If this parameter is NULL, the default locale will
* be used.
* @return A new UFILE, or NULL if an error occurred.
* @stable ICU 3.0
*/
U_STABLE UFILE* U_EXPORT2
u_fstropen(UChar *stringBuf,
int32_t capacity,
const char *locale);
/**
* Close a UFILE. Implies u_fflush first.
* @param file The UFILE to close.
* @stable ICU 3.0
* @see u_fflush
*/
U_STABLE void U_EXPORT2
u_fclose(UFILE *file);
#if U_SHOW_CPLUSPLUS_API
U_NAMESPACE_BEGIN
/**
* \class LocalUFILEPointer
* "Smart pointer" class, closes a UFILE via u_fclose().
* For most methods see the LocalPointerBase base class.
*
* @see LocalPointerBase
* @see LocalPointer
* @stable ICU 4.4
*/
U_DEFINE_LOCAL_OPEN_POINTER(LocalUFILEPointer, UFILE, u_fclose);
U_NAMESPACE_END
#endif
/**
* Tests if the UFILE is at the end of the file stream.
* @param f The UFILE from which to read.
* @return Returns TRUE after the first read operation that attempts to
* read past the end of the file. It returns FALSE if the current position is
* not end of file.
* @stable ICU 3.0
*/
U_STABLE UBool U_EXPORT2
u_feof(UFILE *f);
/**
* Flush output of a UFILE. Implies a flush of
* converter/transliterator state. (That is, a logical break is
* made in the output stream - for example if a different type of
* output is desired.) The underlying OS level file is also flushed.
* Note that for a stateful encoding, the converter may write additional
* bytes to return the stream to default state.
* @param file The UFILE to flush.
* @stable ICU 3.0
*/
U_STABLE void U_EXPORT2
u_fflush(UFILE *file);
/**
* Rewind the file pointer to the beginning of the file.
* @param file The UFILE to rewind.
* @stable ICU 3.0
*/
U_STABLE void
u_frewind(UFILE *file);
/**
* Get the FILE* associated with a UFILE.
* @param f The UFILE
* @return A FILE*, owned by the UFILE. The FILE must not be closed.
* @stable ICU 3.0
*/
U_STABLE FILE* U_EXPORT2
u_fgetfile(UFILE *f);
#if !UCONFIG_NO_FORMATTING
/**
* Get the locale whose conventions are used to format and parse output.
* This is the same locale passed in the preceding call tou_fsetlocale
* or u_fopen.
* @param file The UFILE to set.
* @return The locale whose conventions are used to format and parse output.
* @stable ICU 3.0
*/
U_STABLE const char* U_EXPORT2
u_fgetlocale(UFILE *file);
/**
* Set the locale whose conventions will be used to format and parse output.
* @param locale The locale whose conventions will be used to format
* and parse output.
* @param file The UFILE to query.
* @return NULL if successful, otherwise a negative number.
* @stable ICU 3.0
*/
U_STABLE int32_t U_EXPORT2
u_fsetlocale(UFILE *file,
const char *locale);
#endif
/**
* Get the codepage in which data is written to and read from the UFILE.
* This is the same codepage passed in the preceding call to
* u_fsetcodepage or u_fopen.
* @param file The UFILE to query.
* @return The codepage in which data is written to and read from the UFILE,
* or NULL if an error occurred.
* @stable ICU 3.0
*/
U_STABLE const char* U_EXPORT2
u_fgetcodepage(UFILE *file);
/**
* Set the codepage in which data will be written to and read from the UFILE.
* All Unicode data written to the UFILE will be converted to this codepage
* before it is written to the underlying FILE*. It it generally a bad idea to
* mix codepages within a file. This should only be called right
* after opening the UFile, or after calling u_frewind.
* @param codepage The codepage in which data will be written to
* and read from the file. For example "latin-1" or "ibm-943".
* A value of NULL means the default codepage for the UFILE's current
* locale will be used.
* @param file The UFILE to set.
* @return 0 if successful, otherwise a negative number.
* @see u_frewind
* @stable ICU 3.0
*/
U_STABLE int32_t U_EXPORT2
u_fsetcodepage(const char *codepage,
UFILE *file);
/**
* Returns an alias to the converter being used for this file.
* @param f The UFILE to get the value from
* @return alias to the converter
* @stable ICU 3.0
*/
U_STABLE UConverter* U_EXPORT2 u_fgetConverter(UFILE *f);
#if !UCONFIG_NO_FORMATTING
/* Output functions */
/**
* Write formatted data to stdout.
* @param patternSpecification A pattern specifying how u_printf will
* interpret the variable arguments received and format the data.
* @return The number of Unicode characters written to stdout
* @draft ICU 49
*/
U_DRAFT int32_t U_EXPORT2
u_printf(const char *patternSpecification,
... );
/**
* Write formatted data to a UFILE.
* @param f The UFILE to which to write.
* @param patternSpecification A pattern specifying how u_fprintf will
* interpret the variable arguments received and format the data.
* @return The number of Unicode characters written to f.
* @stable ICU 3.0
*/
U_STABLE int32_t U_EXPORT2
u_fprintf(UFILE *f,
const char *patternSpecification,
... );
/**
* Write formatted data to a UFILE.
* This is identical to u_fprintf, except that it will
* not call va_start and va_end.
* @param f The UFILE to which to write.
* @param patternSpecification A pattern specifying how u_fprintf will
* interpret the variable arguments received and format the data.
* @param ap The argument list to use.
* @return The number of Unicode characters written to f.
* @see u_fprintf
* @stable ICU 3.0
*/
U_STABLE int32_t U_EXPORT2
u_vfprintf(UFILE *f,
const char *patternSpecification,
va_list ap);
/**
* Write formatted data to stdout.
* @param patternSpecification A pattern specifying how u_printf_u will
* interpret the variable arguments received and format the data.
* @return The number of Unicode characters written to stdout
* @draft ICU 49
*/
U_DRAFT int32_t U_EXPORT2
u_printf_u(const UChar *patternSpecification,
... );
/**
* Get a UFILE for stdout.
* @return UFILE that writes to stdout
* @draft ICU 49
*/
U_DRAFT UFILE * U_EXPORT2
u_get_stdout(void);
/**
* Write formatted data to a UFILE.
* @param f The UFILE to which to write.
* @param patternSpecification A pattern specifying how u_fprintf will
* interpret the variable arguments received and format the data.
* @return The number of Unicode characters written to f.
* @stable ICU 3.0
*/
U_STABLE int32_t U_EXPORT2
u_fprintf_u(UFILE *f,
const UChar *patternSpecification,
... );
/**
* Write formatted data to a UFILE.
* This is identical to u_fprintf_u, except that it will
* not call va_start and va_end.
* @param f The UFILE to which to write.
* @param patternSpecification A pattern specifying how u_fprintf will
* interpret the variable arguments received and format the data.
* @param ap The argument list to use.
* @return The number of Unicode characters written to f.
* @see u_fprintf_u
* @stable ICU 3.0
*/
U_STABLE int32_t U_EXPORT2
u_vfprintf_u(UFILE *f,
const UChar *patternSpecification,
va_list ap);
#endif
/**
* Write a Unicode to a UFILE. The null (U+0000) terminated UChar*
* s will be written to f, excluding the NULL terminator.
* A newline will be added to f.
* @param s The UChar* to write.
* @param f The UFILE to which to write.
* @return A non-negative number if successful, EOF otherwise.
* @see u_file_write
* @stable ICU 3.0
*/
U_STABLE int32_t U_EXPORT2
u_fputs(const UChar *s,
UFILE *f);
/**
* Write a UChar to a UFILE.
* @param uc The UChar to write.
* @param f The UFILE to which to write.
* @return The character written if successful, EOF otherwise.
* @stable ICU 3.0
*/
U_STABLE UChar32 U_EXPORT2
u_fputc(UChar32 uc,
UFILE *f);
/**
* Write Unicode to a UFILE.
* The ustring passed in will be converted to the UFILE's underlying
* codepage before it is written.
* @param ustring A pointer to the Unicode data to write.
* @param count The number of Unicode characters to write
* @param f The UFILE to which to write.
* @return The number of Unicode characters written.
* @see u_fputs
* @stable ICU 3.0
*/
U_STABLE int32_t U_EXPORT2
u_file_write(const UChar *ustring,
int32_t count,
UFILE *f);
/* Input functions */
#if !UCONFIG_NO_FORMATTING
/**
* Read formatted data from a UFILE.
* @param f The UFILE from which to read.
* @param patternSpecification A pattern specifying how u_fscanf will
* interpret the variable arguments received and parse the data.
* @return The number of items successfully converted and assigned, or EOF
* if an error occurred.
* @stable ICU 3.0
*/
U_STABLE int32_t U_EXPORT2
u_fscanf(UFILE *f,
const char *patternSpecification,
... );
/**
* Read formatted data from a UFILE.
* This is identical to u_fscanf, except that it will
* not call va_start and va_end.
* @param f The UFILE from which to read.
* @param patternSpecification A pattern specifying how u_fscanf will
* interpret the variable arguments received and parse the data.
* @param ap The argument list to use.
* @return The number of items successfully converted and assigned, or EOF
* if an error occurred.
* @see u_fscanf
* @stable ICU 3.0
*/
U_STABLE int32_t U_EXPORT2
u_vfscanf(UFILE *f,
const char *patternSpecification,
va_list ap);
/**
* Read formatted data from a UFILE.
* @param f The UFILE from which to read.
* @param patternSpecification A pattern specifying how u_fscanf will
* interpret the variable arguments received and parse the data.
* @return The number of items successfully converted and assigned, or EOF
* if an error occurred.
* @stable ICU 3.0
*/
U_STABLE int32_t U_EXPORT2
u_fscanf_u(UFILE *f,
const UChar *patternSpecification,
... );
/**
* Read formatted data from a UFILE.
* This is identical to u_fscanf_u, except that it will
* not call va_start and va_end.
* @param f The UFILE from which to read.
* @param patternSpecification A pattern specifying how u_fscanf will
* interpret the variable arguments received and parse the data.
* @param ap The argument list to use.
* @return The number of items successfully converted and assigned, or EOF
* if an error occurred.
* @see u_fscanf_u
* @stable ICU 3.0
*/
U_STABLE int32_t U_EXPORT2
u_vfscanf_u(UFILE *f,
const UChar *patternSpecification,
va_list ap);
#endif
/**
* Read one line of text into a UChar* string from a UFILE. The newline
* at the end of the line is read into the string. The string is always
* null terminated
* @param f The UFILE from which to read.
* @param n The maximum number of characters - 1 to read.
* @param s The UChar* to receive the read data. Characters will be
* stored successively in s until a newline or EOF is
* reached. A null character (U+0000) will be appended to s.
* @return A pointer to s, or NULL if no characters were available.
* @stable ICU 3.0
*/
U_STABLE UChar* U_EXPORT2
u_fgets(UChar *s,
int32_t n,
UFILE *f);
/**
* Read a UChar from a UFILE. It is recommended that u_fgetcx
* used instead for proper parsing functions, but sometimes reading
* code units is needed instead of codepoints.
*
* @param f The UFILE from which to read.
* @return The UChar value read, or U+FFFF if no character was available.
* @stable ICU 3.0
*/
U_STABLE UChar U_EXPORT2
u_fgetc(UFILE *f);
/**
* Read a UChar32 from a UFILE.
*
* @param f The UFILE from which to read.
* @return The UChar32 value read, or U_EOF if no character was
* available, or U+FFFFFFFF if an ill-formed character was
* encountered.
* @see u_unescape()
* @stable ICU 3.0
*/
U_STABLE UChar32 U_EXPORT2
u_fgetcx(UFILE *f);
/**
* Unget a UChar from a UFILE.
* If this function is not the first to operate on f after a call
* to u_fgetc, the results are undefined.
* If this function is passed a character that was not recieved from the
* previous u_fgetc or u_fgetcx call, the results are undefined.
* @param c The UChar to put back on the stream.
* @param f The UFILE to receive c.
* @return The UChar32 value put back if successful, U_EOF otherwise.
* @stable ICU 3.0
*/
U_STABLE UChar32 U_EXPORT2
u_fungetc(UChar32 c,
UFILE *f);
/**
* Read Unicode from a UFILE.
* Bytes will be converted from the UFILE's underlying codepage, with
* subsequent conversion to Unicode. The data will not be NULL terminated.
* @param chars A pointer to receive the Unicode data.
* @param count The number of Unicode characters to read.
* @param f The UFILE from which to read.
* @return The number of Unicode characters read.
* @stable ICU 3.0
*/
U_STABLE int32_t U_EXPORT2
u_file_read(UChar *chars,
int32_t count,
UFILE *f);
#if !UCONFIG_NO_TRANSLITERATION
/**
* Set a transliterator on the UFILE. The transliterator will be owned by the
* UFILE.
* @param file The UFILE to set transliteration on
* @param adopt The UTransliterator to set. Can be NULL, which will
* mean that no transliteration is used.
* @param direction either U_READ, U_WRITE, or U_READWRITE - sets
* which direction the transliterator is to be applied to. If
* U_READWRITE, the "Read" transliteration will be in the inverse
* direction.
* @param status ICU error code.
* @return The previously set transliterator, owned by the
* caller. If U_READWRITE is specified, only the WRITE transliterator
* is returned. In most cases, the caller should call utrans_close()
* on the result of this function.
* @stable ICU 3.0
*/
U_STABLE UTransliterator* U_EXPORT2
u_fsettransliterator(UFILE *file, UFileDirection direction,
UTransliterator *adopt, UErrorCode *status);
#endif
/* Output string functions */
#if !UCONFIG_NO_FORMATTING
/**
* Write formatted data to a Unicode string.
*
* @param buffer The Unicode String to which to write.
* @param patternSpecification A pattern specifying how u_sprintf will
* interpret the variable arguments received and format the data.
* @return The number of Unicode code units written to buffer. This
* does not include the terminating null character.
* @stable ICU 3.0
*/
U_STABLE int32_t U_EXPORT2
u_sprintf(UChar *buffer,
const char *patternSpecification,
... );
/**
* Write formatted data to a Unicode string. When the number of code units
* required to store the data exceeds count, then count code
* units of data are stored in buffer and a negative value is
* returned. When the number of code units required to store the data equals
* count, the string is not null terminated and count is
* returned.
*
* @param buffer The Unicode String to which to write.
* @param count The number of code units to read.
* @param patternSpecification A pattern specifying how u_sprintf will
* interpret the variable arguments received and format the data.
* @return The number of Unicode characters that would have been written to
* buffer had count been sufficiently large. This does not include
* the terminating null character.
* @stable ICU 3.0
*/
U_STABLE int32_t U_EXPORT2
u_snprintf(UChar *buffer,
int32_t count,
const char *patternSpecification,
... );
/**
* Write formatted data to a Unicode string.
* This is identical to u_sprintf, except that it will
* not call va_start and va_end.
*
* @param buffer The Unicode string to which to write.
* @param patternSpecification A pattern specifying how u_sprintf will
* interpret the variable arguments received and format the data.
* @param ap The argument list to use.
* @return The number of Unicode characters written to buffer.
* @see u_sprintf
* @stable ICU 3.0
*/
U_STABLE int32_t U_EXPORT2
u_vsprintf(UChar *buffer,
const char *patternSpecification,
va_list ap);
/**
* Write formatted data to a Unicode string.
* This is identical to u_snprintf, except that it will
* not call va_start and va_end.