Encoding.3
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:25k
源码类别:

通讯编程

开发平台:

Visual C++

  1. '"
  2. '" Copyright (c) 1997-1998 Sun Microsystems, Inc.
  3. '"
  4. '" See the file "license.terms" for information on usage and redistribution
  5. '" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
  6. '" 
  7. '" RCS: @(#) $Id: Encoding.3,v 1.11.2.1 2003/07/18 16:56:24 dgp Exp $
  8. '" 
  9. .so man.macros
  10. .TH Tcl_GetEncoding 3 "8.1" Tcl "Tcl Library Procedures"
  11. .BS
  12. .SH NAME
  13. Tcl_GetEncoding, Tcl_FreeEncoding, Tcl_ExternalToUtfDString, Tcl_ExternalToUtf, Tcl_UtfToExternalDString, Tcl_UtfToExternal, Tcl_WinTCharToUtf, Tcl_WinUtfToTChar, Tcl_GetEncodingName, Tcl_SetSystemEncoding, Tcl_GetEncodingNames, Tcl_CreateEncoding, Tcl_GetDefaultEncodingDir, Tcl_SetDefaultEncodingDir - procedures for creating and using encodings.
  14. .SH SYNOPSIS
  15. .nf
  16. fB#include <tcl.h>fR
  17. .sp
  18. Tcl_Encoding
  19. fBTcl_GetEncodingfR(fIinterp, namefR)
  20. .sp
  21. void
  22. fBTcl_FreeEncodingfR(fIencodingfR)
  23. .sp
  24. char *
  25. fBTcl_ExternalToUtfDStringfR(fIencoding, src, srcLen, dstPtrfR)
  26. .sp
  27. int
  28. fBTcl_ExternalToUtffR(fIinterp, encoding, src, srcLen, flags, statePtr, dst, dstLen, srcReadPtr, dstWrotePtr, 
  29. dstCharsPtrfR)
  30. .sp
  31. char * 
  32. fBTcl_UtfToExternalDStringfR(fIencoding, src, srcLen, dstPtrfR)
  33. .sp
  34. int
  35. fBTcl_UtfToExternalfR(fIinterp, encoding, src, srcLen, flags, statePtr, dst, dstLen, srcReadPtr, dstWrotePtr, 
  36. dstCharsPtrfR)
  37. .sp
  38. char *
  39. fBTcl_WinTCharToUtffR(fItsrc, srcLen, dstPtrfR)
  40. .sp
  41. TCHAR *
  42. fBTcl_WinUtfToTCharfR(fIsrc, srcLen, dstPtrfR)
  43. .sp
  44. CONST char *
  45. fBTcl_GetEncodingNamefR(fIencodingfR)
  46. .sp
  47. int
  48. fBTcl_SetSystemEncodingfR(fIinterp, namefR)
  49. .sp
  50. void
  51. fBTcl_GetEncodingNamesfR(fIinterpfR)
  52. .sp
  53. Tcl_Encoding
  54. fBTcl_CreateEncodingfR(fItypePtrfR)
  55. .sp
  56. CONST char *
  57. fBTcl_GetDefaultEncodingDirfR(fIvoidfR)
  58. .sp
  59. void
  60. fBTcl_SetDefaultEncodingDirfR(fIpathfR)
  61. .SH ARGUMENTS
  62. .AS Tcl_EncodingState *dstWrotePtr
  63. .AP Tcl_Interp *interp in
  64. Interpreter to use for error reporting, or NULL if no error reporting is
  65. desired.
  66. .AP "CONST char" *name in
  67. Name of encoding to load.
  68. .AP Tcl_Encoding encoding in
  69. The encoding to query, free, or use for converting text.  If fIencodingfR is 
  70. NULL, the current system encoding is used.
  71. .AP "CONST char" *src in
  72. For the fBTcl_ExternalToUtffR functions, an array of bytes in the
  73. specified encoding that are to be converted to UTF-8.  For the
  74. fBTcl_UtfToExternalfR and fBTcl_WinUtfToTCharfR functions, an array of
  75. UTF-8 characters to be converted to the specified encoding.  
  76. .AP "CONST TCHAR" *tsrc in
  77. An array of Windows TCHAR characters to convert to UTF-8.
  78. .AP int srcLen in 
  79. Length of fIsrcfR or fItsrcfR in bytes.  If the length is negative, the 
  80. encoding-specific length of the string is used.
  81. .AP Tcl_DString *dstPtr out
  82. Pointer to an uninitialized or free fBTcl_DStringfR in which the converted
  83. result will be stored.
  84. .AP int flags in
  85. Various flag bits OR-ed together.  
  86. TCL_ENCODING_START signifies that the
  87. source buffer is the first block in a (potentially multi-block) input
  88. stream, telling the conversion routine to reset to an initial state and
  89. perform any initialization that needs to occur before the first byte is
  90. converted.  TCL_ENCODING_END signifies that the source buffer is the last
  91. block in a (potentially multi-block) input stream, telling the conversion
  92. routine to perform any finalization that needs to occur after the last
  93. byte is converted and then to reset to an initial state.
  94. TCL_ENCODING_STOPONERROR signifies that the conversion routine should
  95. return immediately upon reading a source character that doesn't exist in
  96. the target encoding; otherwise a default fallback character will
  97. automatically be substituted.  
  98. .AP Tcl_EncodingState *statePtr in/out
  99. Used when converting a (generally long or indefinite length) byte stream
  100. in a piece by piece fashion.  The conversion routine stores its current
  101. state in fI*statePtrfR after fIsrcfR (the buffer containing the
  102. current piece) has been converted; that state information must be passed
  103. back when converting the next piece of the stream so the conversion
  104. routine knows what state it was in when it left off at the end of the
  105. last piece.  May be NULL, in which case the value specified for fIflagsfR 
  106. is ignored and the source buffer is assumed to contain the complete string to
  107. convert.
  108. .AP char *dst out
  109. Buffer in which the converted result will be stored.  No more than
  110. fIdstLenfR bytes will be stored in fIdstfR.
  111. .AP int dstLen in
  112. The maximum length of the output buffer fIdstfR in bytes.
  113. .AP int *srcReadPtr out
  114. Filled with the number of bytes from fIsrcfR that were actually
  115. converted.  This may be less than the original source length if there was
  116. a problem converting some source characters.  May be NULL.
  117. .AP int *dstWrotePtr out
  118. Filled with the number of bytes that were actually stored in the output
  119. buffer as a result of the conversion.  May be NULL.
  120. .AP int *dstCharsPtr out
  121. Filled with the number of characters that correspond to the number of bytes
  122. stored in the output buffer.  May be NULL.
  123. .AP Tcl_EncodingType *typePtr in
  124. Structure that defines a new type of encoding.  
  125. .AP "CONST char" *path in
  126. A path to the location of the encoding file.  
  127. .BE
  128. .SH INTRODUCTION
  129. .PP
  130. These routines convert between Tcl's internal character representation,
  131. UTF-8, and character representations used by various operating systems or
  132. file systems, such as Unicode, ASCII, or Shift-JIS.  When operating on
  133. strings, such as such as obtaining the names of files or displaying
  134. characters using international fonts, the strings must be translated into
  135. one or possibly multiple formats that the various system calls can use.  For
  136. instance, on a Japanese Unix workstation, a user might obtain a filename
  137. represented in the EUC-JP file encoding and then translate the characters to
  138. the jisx0208 font encoding in order to display the filename in a Tk widget.
  139. The purpose of the encoding package is to help bridge the translation gap.
  140. UTF-8 provides an intermediate staging ground for all the various
  141. encodings.  In the example above, text would be translated into UTF-8 from
  142. whatever file encoding the operating system is using.  Then it would be
  143. translated from UTF-8 into whatever font encoding the display routines
  144. require.
  145. .PP
  146. Some basic encodings are compiled into Tcl.  Others can be defined by the
  147. user or dynamically loaded from encoding files in a
  148. platform-independent manner.
  149. .SH DESCRIPTION
  150. .PP
  151. fBTcl_GetEncodingfR finds an encoding given its fInamefR.  The name may
  152. refer to a builtin Tcl encoding, a user-defined encoding registered by
  153. calling fBTcl_CreateEncodingfR, or a dynamically-loadable encoding
  154. file.  The return value is a token that represents the encoding and can be
  155. used in subsequent calls to procedures such as fBTcl_GetEncodingNamefR,
  156. fBTcl_FreeEncodingfR, and fBTcl_UtfToExternalfR.  If the name did not
  157. refer to any known or loadable encoding, NULL is returned and an error
  158. message is returned in fIinterpfR.
  159. .PP
  160. The encoding package maintains a database of all encodings currently in use.
  161. The first time fInamefR is seen, fBTcl_GetEncodingfR returns an
  162. encoding with a reference count of 1.  If the same fInamefR is requested
  163. further times, then the reference count for that encoding is incremented
  164. without the overhead of allocating a new encoding and all its associated
  165. data structures.  
  166. .PP
  167. When an fIencodingfR is no longer needed, fBTcl_FreeEncodingfR
  168. should be called to release it.  When an fIencodingfR is no longer in use
  169. anywhere (i.e., it has been freed as many times as it has been gotten)
  170. fBTcl_FreeEncodingfR will release all storage the encoding was using
  171. and delete it from the database. 
  172. .PP
  173. fBTcl_ExternalToUtfDStringfR converts a source buffer fIsrcfR from the
  174. specified fIencodingfR into UTF-8.  The converted bytes are stored in 
  175. fIdstPtrfR, which is then null-terminated.  The caller should eventually
  176. call fBTcl_DStringFreefR to free any information stored in fIdstPtrfR.
  177. When converting, if any of the characters in the source buffer cannot be
  178. represented in the target encoding, a default fallback character will be
  179. used.  The return value is a pointer to the value stored in the DString.
  180. .PP
  181. fBTcl_ExternalToUtffR converts a source buffer fIsrcfR from the specified
  182. fIencodingfR into UTF-8.  Up to fIsrcLenfR bytes are converted from the
  183. source buffer and up to fIdstLenfR converted bytes are stored in fIdstfR.
  184. In all cases, fI*srcReadPtrfR is filled with the number of bytes that were
  185. successfully converted from fIsrcfR and fI*dstWrotePtrfR is filled with
  186. the corresponding number of bytes that were stored in fIdstfR.  The return
  187. value is one of the following:
  188. .RS
  189. .IP fBTCL_OKfR 29
  190. All bytes of fIsrcfR were converted.
  191. .IP fBTCL_CONVERT_NOSPACEfR 29
  192. The destination buffer was not large enough for all of the converted data; as
  193. many characters as could fit were converted though.
  194. .IP fBTCL_CONVERT_MULTIBYTEfR 29
  195. The last fews bytes in the source buffer were the beginning of a multibyte
  196. sequence, but more bytes were needed to complete this sequence.  A
  197. subsequent call to the conversion routine should pass a buffer containing
  198. the unconverted bytes that remained in fIsrcfR plus some further bytes
  199. from the source stream to properly convert the formerly split-up multibyte
  200. sequence.  
  201. .IP fBTCL_CONVERT_SYNTAXfR 29
  202. The source buffer contained an invalid character sequence.  This may occur
  203. if the input stream has been damaged or if the input encoding method was
  204. misidentified.
  205. .IP fBTCL_CONVERT_UNKNOWNfR 29
  206. The source buffer contained a character that could not be represented in
  207. the target encoding and TCL_ENCODING_STOPONERROR was specified.  
  208. .RE
  209. .LP
  210. fBTcl_UtfToExternalDStringfR converts a source buffer fIsrcfR from UTF-8 
  211. into the specified fIencodingfR.  The converted bytes are stored in
  212. fIdstPtrfR, which is then terminated with the appropriate encoding-specific
  213. null.  The caller should eventually call fBTcl_DStringFreefR to free any
  214. information stored in fIdstPtrfR.  When converting, if any of the
  215. characters in the source buffer cannot be represented in the target
  216. encoding, a default fallback character will be used.  The return value is
  217. a pointer to the value stored in the DString.
  218. .PP
  219. fBTcl_UtfToExternalfR converts a source buffer fIsrcfR from UTF-8 into
  220. the specified fIencodingfR.  Up to fIsrcLenfR bytes are converted from
  221. the source buffer and up to fIdstLenfR converted bytes are stored in
  222. fIdstfR.  In all cases, fI*srcReadPtrfR is filled with the number of
  223. bytes that were successfully converted from fIsrcfR and fI*dstWrotePtrfR
  224. is filled with the corresponding number of bytes that were stored in
  225. fIdstfR.  The return values are the same as the return values for
  226. fBTcl_ExternalToUtffR.
  227. .PP
  228. fBTcl_WinUtfToTCharfR and fBTcl_WinTCharToUtffR are
  229. Windows-only convenience
  230. functions for converting between UTF-8 and Windows strings.  On Windows 95
  231. (as with the Macintosh and Unix operating systems),
  232. all strings exchanged between Tcl and the operating system are "char"
  233. based.  On Windows NT, some strings exchanged between Tcl and the
  234. operating system are "char" oriented while others are in Unicode.  By
  235. convention, in Windows a TCHAR is a character in the ANSI code page
  236. on Windows 95 and a Unicode character on Windows NT.
  237. .PP
  238. If you planned to use the same "char" based interfaces on both Windows
  239. 95 and Windows NT, you could use fBTcl_UtfToExternalfR and
  240. fBTcl_ExternalToUtffR (or their fBTcl_DStringfR equivalents) with an
  241. encoding of NULL (the current system encoding).  On the other hand,
  242. if you planned to use the Unicode interface when running on Windows NT
  243. and the "char" interfaces when running on Windows 95, you would have
  244. to perform the following type of test over and over in your program
  245. (as represented in pseudo-code):
  246. .CS
  247. if (running NT) {
  248.     encoding <- Tcl_GetEncoding("unicode");
  249.     nativeBuffer <- Tcl_UtfToExternal(encoding, utfBuffer);
  250.     Tcl_FreeEncoding(encoding);
  251. } else {
  252.     nativeBuffer <- Tcl_UtfToExternal(NULL, utfBuffer);
  253. .CE
  254. fBTcl_WinUtfToTCharfR and fBTcl_WinTCharToUtffR automatically
  255. handle this test and use the proper encoding based on the current
  256. operating system.  fBTcl_WinUtfToTCharfR returns a pointer to
  257. a TCHAR string, and fBTcl_WinTCharToUtffR expects a TCHAR string
  258. pointer as the fIsrcfR string.  Otherwise, these functions
  259. behave identically to fBTcl_UtfToExternalDStringfR and
  260. fBTcl_ExternalToUtfDStringfR.
  261. .PP
  262. fBTcl_GetEncodingNamefR is roughly the inverse of fBTcl_GetEncodingfR.
  263. Given an fIencodingfR, the return value is the fInamefR argument that
  264. was used to create the encoding.  The string returned by 
  265. fBTcl_GetEncodingNamefR is only guaranteed to persist until the
  266. fIencodingfR is deleted.  The caller must not modify this string.
  267. .PP
  268. fBTcl_SetSystemEncodingfR sets the default encoding that should be used
  269. whenever the user passes a NULL value for the fIencodingfR argument to
  270. any of the other encoding functions.  If fInamefR is NULL, the system
  271. encoding is reset to the default system encoding, fBbinaryfR.  If the
  272. name did not refer to any known or loadable encoding, TCL_ERROR is
  273. returned and an error message is left in fIinterpfR.  Otherwise, this
  274. procedure increments the reference count of the new system encoding,
  275. decrements the reference count of the old system encoding, and returns
  276. TCL_OK.
  277. .PP
  278. fBTcl_GetEncodingNamesfR sets the fIinterpfR result to a list
  279. consisting of the names of all the encodings that are currently defined
  280. or can be dynamically loaded, searching the encoding path specified by
  281. fBTcl_SetDefaultEncodingDirfR.  This procedure does not ensure that the
  282. dynamically-loadable encoding files contain valid data, but merely that they
  283. exist.
  284. .PP
  285. fBTcl_CreateEncodingfR defines a new encoding and registers the C
  286. procedures that are called back to convert between the encoding and
  287. UTF-8.  Encodings created by fBTcl_CreateEncodingfR are thereafter
  288. visible in the database used by fBTcl_GetEncodingfR.  Just as with the
  289. fBTcl_GetEncodingfR procedure, the return value is a token that
  290. represents the encoding and can be used in subsequent calls to other
  291. encoding functions.  fBTcl_CreateEncodingfR returns an encoding with a
  292. reference count of 1. If an encoding with the specified fInamefR
  293. already exists, then its entry in the database is replaced with the new
  294. encoding; the token for the old encoding will remain valid and continue
  295. to behave as before, but users of the new token will now call the new
  296. encoding procedures.  
  297. .PP
  298. The fItypePtrfR argument to fBTcl_CreateEncodingfR contains information 
  299. about the name of the encoding and the procedures that will be called to
  300. convert between this encoding and UTF-8.  It is defined as follows:
  301. .PP
  302. .CS
  303. typedef struct Tcl_EncodingType {
  304. CONST char *fIencodingNamefR;
  305. Tcl_EncodingConvertProc *fItoUtfProcfR;
  306. Tcl_EncodingConvertProc *fIfromUtfProcfR;
  307. Tcl_EncodingFreeProc *fIfreeProcfR;
  308. ClientData fIclientDatafR;
  309. int fInullSizefR;
  310. } Tcl_EncodingType;  
  311. .CE
  312. .PP
  313. The fIencodingNamefR provides a string name for the encoding, by
  314. which it can be referred in other procedures such as
  315. fBTcl_GetEncodingfR.  The fItoUtfProcfR refers to a callback
  316. procedure to invoke to convert text from this encoding into UTF-8.
  317. The fIfromUtfProcfR refers to a callback procedure to invoke to
  318. convert text from UTF-8 into this encoding.  The fIfreeProcfR refers
  319. to a callback procedure to invoke when this encoding is deleted.  The
  320. fIfreeProcfR field may be NULL.  The fIclientDatafR contains an
  321. arbitrary one-word value passed to fItoUtfProcfR, fIfromUtfProcfR,
  322. and fIfreeProcfR whenever they are called.  Typically, this is a
  323. pointer to a data structure containing encoding-specific information
  324. that can be used by the callback procedures.  For instance, two very
  325. similar encodings such as fBasciifR and fBmacRomanfR may use the
  326. same callback procedure, but use different values of fIclientDatafR
  327. to control its behavior.  The fInullSizefR specifies the number of
  328. zero bytes that signify end-of-string in this encoding.  It must be
  329. fB1fR (for single-byte or multi-byte encodings like ASCII or
  330. Shift-JIS) or fB2fR (for double-byte encodings like Unicode).
  331. Constant-sized encodings with 3 or more bytes per character (such as
  332. CNS11643) are not accepted.
  333. .PP
  334. The callback procedures fItoUtfProcfR and fIfromUtfProcfR should match the
  335. type fBTcl_EncodingConvertProcfR:
  336. .PP
  337. .CS
  338. typedef int Tcl_EncodingConvertProc(
  339. ClientData fIclientDatafR,
  340. CONST char *fIsrcfR, 
  341. int fIsrcLenfR, 
  342. int fIflagsfR, 
  343. Tcl_Encoding *fIstatePtrfR,
  344. char *fIdstfR, 
  345. int fIdstLenfR, 
  346. int *fIsrcReadPtrfR,
  347. int *fIdstWrotePtrfR,
  348. int *fIdstCharsPtrfR);
  349. .CE
  350. .PP
  351. The fItoUtfProcfR and fIfromUtfProcfR procedures are called by the
  352. fBTcl_ExternalToUtffR or fBTcl_UtfToExternalfR family of functions to
  353. perform the actual conversion.  The fIclientDatafR parameter to these
  354. procedures is the same as the fIclientDatafR field specified to
  355. fBTcl_CreateEncodingfR when the encoding was created.  The remaining
  356. arguments to the callback procedures are the same as the arguments,
  357. documented at the top, to fBTcl_ExternalToUtffR or
  358. fBTcl_UtfToExternalfR, with the following exceptions.  If the
  359. fIsrcLenfR argument to one of those high-level functions is negative,
  360. the value passed to the callback procedure will be the appropriate
  361. encoding-specific string length of fIsrcfR.  If any of the fIsrcReadPtrfR, 
  362. fIdstWrotePtrfR, or fIdstCharsPtrfR arguments to one of the high-level
  363. functions is NULL, the corresponding value passed to the callback
  364. procedure will be a non-NULL location.
  365. .PP
  366. The callback procedure fIfreeProcfR, if non-NULL, should match the type 
  367. fBTcl_EncodingFreeProcfR:
  368. .CS
  369. typedef void Tcl_EncodingFreeProc(
  370. ClientData fIclientDatafR);
  371. .CE
  372. .PP
  373. This fIfreeProcfR function is called when the encoding is deleted.  The
  374. fIclientDatafR parameter is the same as the fIclientDatafR field
  375. specified to fBTcl_CreateEncodingfR when the encoding was created.  
  376. .PP
  377. fBTcl_GetDefaultEncodingDirfR and fBTcl_SetDefaultEncodingDirfR
  378. access and set the directory to use when locating the default encoding
  379. files.  If this value is not NULL, the fBTclpInitLibraryPathfR routine
  380. appends the path to the head of the search path, and uses this path as
  381. the first place to look into when trying to locate the encoding file.
  382. .SH "ENCODING FILES"
  383. Space would prohibit precompiling into Tcl every possible encoding
  384. algorithm, so many encodings are stored on disk as dynamically-loadable
  385. encoding files.  This behavior also allows the user to create additional
  386. encoding files that can be loaded using the same mechanism.  These
  387. encoding files contain information about the tables and/or escape
  388. sequences used to map between an external encoding and Unicode.  The
  389. external encoding may consist of single-byte, multi-byte, or double-byte
  390. characters.  
  391. .PP
  392. Each dynamically-loadable encoding is represented as a text file.  The
  393. initial line of the file, beginning with a ``#'' symbol, is a comment
  394. that provides a human-readable description of the file.  The next line
  395. identifies the type of encoding file.  It can be one of the following
  396. letters:
  397. .IP "[1]   fBSfR"
  398. A single-byte encoding, where one character is always one byte long in the
  399. encoding.  An example is fBiso8859-1fR, used by many European languages.
  400. .IP "[2]   fBDfR"
  401. A double-byte encoding, where one character is always two bytes long in the
  402. encoding.  An example is fBbig5fR, used for Chinese text.
  403. .IP "[3]   fBMfR"
  404. A multi-byte encoding, where one character may be either one or two bytes long.
  405. Certain bytes are a lead bytes, indicating that another byte must follow
  406. and that together the two bytes represent one character.  Other bytes are not
  407. lead bytes and represent themselves.  An example is fBshiftjisfR, used by
  408. many Japanese computers.
  409. .IP "[4]   fBEfR"
  410. An escape-sequence encoding, specifying that certain sequences of bytes
  411. do not represent characters, but commands that describe how following bytes
  412. should be interpreted.  
  413. .PP
  414. The rest of the lines in the file depend on the type.  
  415. .PP
  416. Cases [1], [2], and [3] are collectively referred to as table-based encoding
  417. files.  The lines in a table-based encoding file are in the same
  418. format as this example taken from the fBshiftjisfR encoding (this is not
  419. the complete file):
  420. .CS
  421. # Encoding file: shiftjis, multi-byte
  422. M
  423. 003F 0 40
  424. 00
  425. 0000000100020003000400050006000700080009000A000B000C000D000E000F
  426. 0010001100120013001400150016001700180019001A001B001C001D001E001F
  427. 0020002100220023002400250026002700280029002A002B002C002D002E002F
  428. 0030003100320033003400350036003700380039003A003B003C003D003E003F
  429. 0040004100420043004400450046004700480049004A004B004C004D004E004F
  430. 0050005100520053005400550056005700580059005A005B005C005D005E005F
  431. 0060006100620063006400650066006700680069006A006B006C006D006E006F
  432. 0070007100720073007400750076007700780079007A007B007C007D203E007F
  433. 0080000000000000000000000000000000000000000000000000000000000000
  434. 0000000000000000000000000000000000000000000000000000000000000000
  435. 0000FF61FF62FF63FF64FF65FF66FF67FF68FF69FF6AFF6BFF6CFF6DFF6EFF6F
  436. FF70FF71FF72FF73FF74FF75FF76FF77FF78FF79FF7AFF7BFF7CFF7DFF7EFF7F
  437. FF80FF81FF82FF83FF84FF85FF86FF87FF88FF89FF8AFF8BFF8CFF8DFF8EFF8F
  438. FF90FF91FF92FF93FF94FF95FF96FF97FF98FF99FF9AFF9BFF9CFF9DFF9EFF9F
  439. 0000000000000000000000000000000000000000000000000000000000000000
  440. 0000000000000000000000000000000000000000000000000000000000000000
  441. 81
  442. 0000000000000000000000000000000000000000000000000000000000000000
  443. 0000000000000000000000000000000000000000000000000000000000000000
  444. 0000000000000000000000000000000000000000000000000000000000000000
  445. 0000000000000000000000000000000000000000000000000000000000000000
  446. 300030013002FF0CFF0E30FBFF1AFF1BFF1FFF01309B309C00B4FF4000A8FF3E
  447. FFE3FF3F30FD30FE309D309E30034EDD30053006300730FC20152010FF0F005C
  448. 301C2016FF5C2026202520182019201C201DFF08FF0930143015FF3BFF3DFF5B
  449. FF5D30083009300A300B300C300D300E300F30103011FF0B221200B100D70000
  450. 00F7FF1D2260FF1CFF1E22662267221E22342642264000B0203220332103FFE5
  451. FF0400A200A3FF05FF03FF06FF0AFF2000A72606260525CB25CF25CE25C725C6
  452. 25A125A025B325B225BD25BC203B301221922190219121933013000000000000
  453. 000000000000000000000000000000002208220B2286228722822283222A2229
  454. 000000000000000000000000000000002227222800AC21D221D4220022030000
  455. 0000000000000000000000000000000000000000222022A52312220222072261
  456. 2252226A226B221A223D221D2235222B222C0000000000000000000000000000
  457. 212B2030266F266D266A2020202100B6000000000000000025EF000000000000
  458. .CE
  459. .PP
  460. The third line of the file is three numbers.  The first number is the
  461. fallback character (in base 16) to use when converting from UTF-8 to this
  462. encoding.  The second number is a fB1fR if this file represents the
  463. encoding for a symbol font, or fB0fR otherwise.  The last number (in base
  464. 10) is how many pages of data follow.  
  465. .PP
  466. Subsequent lines in the example above are pages that describe how to map
  467. from the encoding into 2-byte Unicode.  The first line in a page identifies
  468. the page number.  Following it are 256 double-byte numbers, arranged as 16
  469. rows of 16 numbers.  Given a character in the encoding, the high byte of
  470. that character is used to select which page, and the low byte of that
  471. character is used as an index to select one of the double-byte numbers in
  472. that page - the value obtained being the corresponding Unicode character.
  473. By examination of the example above, one can see that the characters 0x7E
  474. and 0x8163 in fBshiftjisfR map to 203E and 2026 in Unicode, respectively.
  475. .PP
  476. Following the first page will be all the other pages, each in the same
  477. format as the first: one number identifying the page followed by 256
  478. double-byte Unicode characters.  If a character in the encoding maps to the
  479. Unicode character 0000, it means that the character doesn't actually exist.
  480. If all characters on a page would map to 0000, that page can be omitted.
  481. .PP
  482. Case [4] is the escape-sequence encoding file.  The lines in an this type of
  483. file are in the same format as this example taken from the fBiso2022-jpfR
  484. encoding:
  485. .CS
  486. .ta 1.5i
  487. # Encoding file: iso2022-jp, escape-driven
  488. E
  489. init {}
  490. final {}
  491. iso8859-1 \x1b(B
  492. jis0201 \x1b(J
  493. jis0208 \x1b$@
  494. jis0208 \x1b$B
  495. jis0212 \x1b$(D
  496. gb2312 \x1b$A
  497. ksc5601 \x1b$(C
  498. .CE
  499. .PP
  500. In the file, the first column represents an option and the second column
  501. is the associated value.  fBinitfR is a string to emit or expect before
  502. the first character is converted, while fBfinalfR is a string to emit
  503. or expect after the last character.  All other options are names of
  504. table-based encodings; the associated value is the escape-sequence that
  505. marks that encoding.  Tcl syntax is used for the values; in the above
  506. example, for instance, ``fB{}fR'' represents the empty string and
  507. ``fB\x1bfR'' represents character 27.
  508. .PP
  509. When fBTcl_GetEncodingfR encounters an encoding fInamefR that has not
  510. been loaded, it attempts to load an encoding file called fInamefB.encfR
  511. from the fBencodingfR subdirectory of each directory specified in the
  512. library path fB$tcl_libPathfR.  If the encoding file exists, but is
  513. malformed, an error message will be left in fIinterpfR.
  514. .SH KEYWORDS
  515. utf, encoding, convert