这与https://stackoverflow.com/questions/1791082/utf-8-php-and-xml-mysql,我仍在努力理解。
我有几个单独的问题,希望能帮助我了解如何解决我遇到的问题。
我正在尝试从数据库读取值并输出到 UTF-8 格式的文件中。但我遇到了编码问题,所以我想我应该删除所有代码并从以下代码开始:
$string = "Otivägen";
// then output to a file.
但是vim
我甚至无法输入该字符串;每次我粘贴它时都会得到Otivägen
。
我尝试创建一个仅包含该字符串的空白 PHP 文件并上传它,但是当我cat
再次使用此文件时,我得到了Otivägen
。
我的问题是:
- 为什么会
vim
这样显示呢? - 如果下载了文件,并且应用程序需要 UTF-8,它是否可以正确显示?
- 我如何才能将该字符串输出到最终为 UTF-8 编码的 XML 文件中?
我目前对编码的理解有限,我正在尝试理解它。
答案1
1)为什么会
vim
这样显示?
这看起来 vim 将 UTF-8 编码数据显示为 ISO 8859-1。复制和粘贴可能会有问题(您没有写出您使用的是什么系统),因此我建议直接输入文本。
要在 vim 中正确编辑文件,首先将 vim 设置为使用 UTF-8:
:set encoding=utf-8
然后输入文本,确保其正确显示,然后保存。这将为您提供一个以 UTF-8 编码的文件。
2)如果下载了文件并且应用程序需要 UTF-8,它是否可以正确显示?
取决于编码。如果你按照上面的方法保存,那么可以。
3)如何将此字符串输出到最终为UTF-8编码的XML文件的文件中。
这显然非常困难。我不太熟悉 PHP,但根据 Wikipedia 的说法:
PHP 目前不支持 Unicode 或多字节字符串;Unicode 支持将包含在 PHP 6[...] 中。
因此,您可能需要通过 Google 寻找解决方法。此外,还有一些适用于 PHP 和 UTF-8 的 UTF-8 帮助库。否则,最好选择其他语言,例如具有可靠 Unicode 支持的 Java。
答案2
UTF8 很有趣。一旦它起作用。:-/ 如果链中的任何内容正在等待其他内容并且没有检查,那么一切都会变得很糟糕。
- 您需要使用支持 UTF8 的终端程序。Gnome-terminal 支持。KTerm 支持。ETerm 不支持。
- 检查 shell 中的 LANG 变量。我的是 en_AU.UTF-8,表示 UTF8 中的英语(澳大利亚)。
- vim 应该从 shell 继承这一点。你应该能够使用以下命令验证这一点
:set encoding
我刚刚尝试了一下,一切正常。
关键在于一切需要采用UTF8模式。