diff options
author | Federico Mena Quintero <federico@ximian.com> | 2004-06-16 00:26:00 +0000 |
---|---|---|
committer | Federico Mena Quintero <federico@src.gnome.org> | 2004-06-16 00:26:00 +0000 |
commit | ee36853a879d01f986679ff5cc904fcb65f0850d (patch) | |
tree | 3fadd9a2b095829dc6635706c64eb6a9fda3435e | |
parent | 219c3c3fe0c4084101238033fa791c80403dcd69 (diff) |
Merged from HEAD:
2004-06-15 Federico Mena Quintero <federico@ximian.com>
Merged from HEAD:
* glib/tmpl/conversions.sgml: New section on file name encodings.
* glib/file-name-encodings.sxd: New diagram of how file name
encodings work.
* glib/file-name-encodings.png: Same as above, for inclusion in
the generated docs.
* glib/Makefile.am (HTML_IMAGES): Add file-name-encodings.png.
(EXTRA_DIST): Add the new images.
* glib/running.sgml: Add ids to the corresponding paragraphs that
describe G_FILENAME_ENCODING and G_BROKEN_FILENAMES, to be able to
reference them from elsewhere.
-rw-r--r-- | docs/reference/ChangeLog | 19 | ||||
-rw-r--r-- | docs/reference/glib/Makefile.am | 3 | ||||
-rw-r--r-- | docs/reference/glib/file-name-encodings.png | bin | 0 -> 30639 bytes | |||
-rw-r--r-- | docs/reference/glib/file-name-encodings.sxd | bin | 0 -> 7006 bytes | |||
-rw-r--r-- | docs/reference/glib/running.sgml | 4 | ||||
-rw-r--r-- | docs/reference/glib/tmpl/conversions.sgml | 155 |
6 files changed, 179 insertions, 2 deletions
diff --git a/docs/reference/ChangeLog b/docs/reference/ChangeLog index 28638db4c..3a5f2880c 100644 --- a/docs/reference/ChangeLog +++ b/docs/reference/ChangeLog @@ -1,3 +1,22 @@ +2004-06-15 Federico Mena Quintero <federico@ximian.com> + + Merged from HEAD: + + * glib/tmpl/conversions.sgml: New section on file name encodings. + + * glib/file-name-encodings.sxd: New diagram of how file name + encodings work. + + * glib/file-name-encodings.png: Same as above, for inclusion in + the generated docs. + + * glib/Makefile.am (HTML_IMAGES): Add file-name-encodings.png. + (EXTRA_DIST): Add the new images. + + * glib/running.sgml: Add ids to the corresponding paragraphs that + describe G_FILENAME_ENCODING and G_BROKEN_FILENAMES, to be able to + reference them from elsewhere. + Sun Jun 6 23:20:42 2004 Matthias Clasen <maclas@gmx.de> * gobject/tmpl/gtype.sgml: Fix the docs for G_DEFINE_TYPE() diff --git a/docs/reference/glib/Makefile.am b/docs/reference/glib/Makefile.am index fb97bff18..b2b82bf41 100644 --- a/docs/reference/glib/Makefile.am +++ b/docs/reference/glib/Makefile.am @@ -39,6 +39,7 @@ MKDB_OPTIONS=--sgml-mode --output-format=xml --ignore-files=trio # Images to copy into HTML directory HTML_IMAGES = \ + file-name-encodings.png \ mainloop-states.gif # Extra SGML files that are included by $(DOC_MAIN_SGML_FILE) @@ -60,6 +61,8 @@ include $(top_srcdir)/gtk-doc.make # Other files to distribute EXTRA_DIST += \ + file-name-encodings.png \ + file-name-encodings.sxd \ mainloop-states.fig \ mainloop-states.png \ mainloop-states.eps \ diff --git a/docs/reference/glib/file-name-encodings.png b/docs/reference/glib/file-name-encodings.png Binary files differnew file mode 100644 index 000000000..035c9ee25 --- /dev/null +++ b/docs/reference/glib/file-name-encodings.png diff --git a/docs/reference/glib/file-name-encodings.sxd b/docs/reference/glib/file-name-encodings.sxd Binary files differnew file mode 100644 index 000000000..46750dc17 --- /dev/null +++ b/docs/reference/glib/file-name-encodings.sxd diff --git a/docs/reference/glib/running.sgml b/docs/reference/glib/running.sgml index 5b250b0e5..f86fdf92c 100644 --- a/docs/reference/glib/running.sgml +++ b/docs/reference/glib/running.sgml @@ -23,7 +23,7 @@ GLib inspects a few of environment variables in addition to standard variables like <envar>LANG</envar>, <envar>PATH</envar> or <envar>HOME</envar>. </para> -<formalpara> +<formalpara id="G_FILENAME_ENCODING"> <title><envar>G_FILENAME_ENCODING</envar></title> <para> @@ -34,7 +34,7 @@ variables like <envar>LANG</envar>, <envar>PATH</envar> or <envar>HOME</envar>. </para> </formalpara> -<formalpara> +<formalpara id="G_BROKEN_FILENAMES"> <title><envar>G_BROKEN_FILENAMES</envar></title> <para> diff --git a/docs/reference/glib/tmpl/conversions.sgml b/docs/reference/glib/tmpl/conversions.sgml index 4429fd9fa..aa14611a2 100644 --- a/docs/reference/glib/tmpl/conversions.sgml +++ b/docs/reference/glib/tmpl/conversions.sgml @@ -9,6 +9,153 @@ convert strings between different character sets using <function>iconv()</functi </para> + <refsect2 id="file-name-encodings"> + <title>File Name Encodings</title> + + <para> + Historically, Unix has not had a defined encoding for file + names: a file name is valid as long as it does not have path + separators in it ("/"). However, displaying file names may + require conversion: from the character set in which they were + created, to the character set in which the application + operates. Consider the Spanish file name + "<filename>Presentación.sxi</filename>". If the + application which created it uses ISO-8859-1 for its encoding, + then the actual file name on disk would look like this: + </para> + + <programlisting id="filename-iso8859-1"> +Character: P r e s e n t a c i ó n . s x i +Hex code: 50 72 65 73 65 6e 74 61 63 69 f3 6e 2e 73 78 69 + </programlisting> + + <para> + However, if the application use UTF-8, the actual file name on + disk would look like this: + </para> + + <programlisting id="filename-utf-8"> +Character: P r e s e n t a c i ó n . s x i +Hex code: 50 72 65 73 65 6e 74 61 63 69 c3 b3 6e 2e 73 78 69 + </programlisting> + + <para> + Glib uses UTF-8 for its strings, and GUI toolkits like GTK+ + that use Glib do the same thing. If you get a file name from + the file system, for example, from + <function>readdir(3)</function> or from <link + linkend="g_dir_read_name"><function>g_dir_read_name()</function></link>, + and you wish to display the file name to the user, you + <emphasis>will</emphasis> need to convert it into UTF-8. The + opposite case is when the user types the name of a file he + wishes to save: the toolkit will give you that string in + UTF-8 encoding, and you will need to convert it to the + character set used for file names before you can create the + file with <function>open(2)</function> or + <function>fopen(3)</function>. + </para> + + <para> + By default, Glib assumes that file names on disk are in UTF-8 + encoding. This is a valid assumption for file systems which + were created relatively recently: most applications use UTF-8 + encoding for their strings, and that is also what they use for + the file names they create. However, older file systems may + still contain file names created in "older" encodings, such as + ISO-8859-1. In this case, for compatibility reasons, you may + want to instruct Glib to use that particular encoding for file + names rather than UTF-8. You can do this by specifying the + encoding for file names in the <link + linkend="G_FILENAME_ENCODING"><envar>G_FILENAME_ENCODING</envar></link> + environment variable. For example, if your installation uses + ISO-8859-1 for file names, you can put this in your + <filename>~/.profile</filename>: + </para> + + <programlisting> +export G_FILENAME_ENCODING=ISO-8859-1 + </programlisting> + + <para> + Glib provides the functions <link + linkend="g_filename_to_utf8"><function>g_filename_to_utf8()</function></link> + and <link + linkend="g_filename_from_utf8"><function>g_filename_from_utf8()</function></link> + to perform the necessary conversions. These functions convert + file names from the encoding specified in + <envar>G_FILENAME_ENCODING</envar> to UTF-8 and vice-versa. + <xref linkend="file-name-encodings-diagram"/> illustrates how + these functions are used to convert between UTF-8 and the + encoding for file names in the file system. + </para> + + <figure id="file-name-encodings-diagram"> + <title>Conversion between File Name Encodings</title> + <graphic fileref="file-name-encodings.png" format="PNG"/> + </figure> + + <refsect3 id="file-name-encodings-checklist"> + <title>Checklist for Application Writers</title> + + <para> + This section is a practical summary of the detailed + description above. You can use this as a checklist of + things to do to make sure your applications process file + name encodings correctly. + </para> + + <orderedlist> + <listitem> + <para> + If you get a file name from the file system from a + function such as <function>readdir(3)</function> or + <function>gtk_file_chooser_get_filename()</function>, + you do not need to do any conversion to pass that + file name to functions like <function>open(2)</function>, + <function>rename(2)</function>, or + <function>fopen(3)</function> — those are "raw" + file names which the file system understands. + </para> + </listitem> + + <listitem> + <para> + If you need to display a file name, convert it to UTF-8 + first by using <link + linkend="g_filename_to_utf8"><function>g_filename_to_utf8()</function></link>. + If conversion fails, display a string like + "<literal>Unknown file name</literal>". <emphasis>Do + not</emphasis> convert this string back into the + encoding used for file names if you wish to pass it to + the file system; use the original file name instead. + For example, the document window of a word processor + could display "Unknown file name" in its title bar but + still let the user save the file, as it would keep the + raw file name internally. This can happen if the user + has not set the <envar>G_FILENAME_ENCODING</envar> + environment variable even though he has files whose + names are not encoded in UTF-8. + </para> + </listitem> + + <listitem> + <para> + If your user interface lets the user type a file name + for saving or renaming, convert it to the encoding used + for file names in the file system by using <link + linkend="g_filename_from_utf8"><function>g_filename_from_utf8()</function></link>. + Pass the converted file name to functions like + <function>fopen(3)</function>. If conversion fails, ask + the user to enter a different file name. This can + happen if the user types Japanese characters when + <envar>G_FILENAME_ENCODING</envar> is set to + <literal>ISO-8859-1</literal>, for example. + </para> + </listitem> + </orderedlist> + </refsect3> + </refsect2> + <!-- ##### SECTION See_Also ##### --> <para> @@ -204,3 +351,11 @@ is not supported. @Returns: +<!-- +Local variables: +mode: sgml +sgml-parent-document: ("../glib-docs.sgml" "book" "refentry") +End: +--> + + |