4

嗨,我主要将英语和德语字符保存到当前设置为 utf-8 字符集的 mysql 数据库中。

我假设我应该对这种类型的数据使用 latin1 字符集,对吗?

如果是这样,我该如何更改字符集以更正现在保存在 utf-8 中的德语字符?

更新

也许这是一个检索问题......当我通过 php 从数据库导出数据时,我当然会得到 utf-8,我可以做检索给我 latin1 吗?

更新 1

好的,我正在建一个网站,html编码是uft-8,db是uft-8,现在我想运行一些导出并提取数据,这些数据应该在excel表中返回,数据是utf-8,但在这里我需要字符为 latin1 ...或者从数据库中提取的 excel 表的编码需要使 Töst 显示 Täst。现在我得到这样的数据-> Töst

更新 2

我正在使用以下 php 脚本进行转储:

http://www.fundisom.com/phparadise/php/databases/mySQL_to_excel

在第 48 行,我已将代码更改为

header("Content-Type: application/$file_type; charset=utf-8");

行为没有改变。

我将如何解决这个问题?

几乎解决

<?php
$text = "ö is a valid UTF-8 character";
echo 'Original : ', $text, PHP_EOL;
echo 'TRANSLIT : ', iconv("UTF-8", "ISO-8859-1//TRANSLIT", $text), PHP_EOL;
echo 'IGNORE   : ', iconv("UTF-8", "ISO-8859-1//IGNORE", $text), PHP_EOL;
echo 'Plain    : ', iconv("UTF-8", "ISO-8859-1", $text), PHP_EOL;
?>

我认为这是我需要的……但我需要在 php 脚本的上下文中检查它……明天:-)

4

4 回答 4

2

一旦你使用像 UTF-8 这样的双字节字符,就没有回头路了……

您可以使用的越近是iconv

像这样

<?php
$text = "ü is still a valid ISO-8859-1";
echo 'Original : ', $text, PHP_EOL;
echo 'TRANSLIT : ', iconv("UTF-8", "ISO-8859-1//TRANSLIT", $text), PHP_EOL;
echo 'IGNORE   : ', iconv("UTF-8", "ISO-8859-1//IGNORE", $text), PHP_EOL;
echo 'Plain    : ', iconv("UTF-8", "ISO-8859-1", $text), PHP_EOL;
?>

详情: http: //php.net/manual/en/function.iconv.php

于 2010-12-17T00:49:26.320 回答
1

使用 UTF-8,您可以存储 Unicode 支持的任何字符,使用 UTF-8,您可以存储 Unicode 支持的任何字符,因此使用它来存储 latin1 字符应该没有任何问题(这只是Unicode 支持什么)。

所以,对于信息存储,你没问题;如果您在检索数据时需要进行任何转换,这取决于您用于从数据库获取数据的连接器以及您的编程语言如何处理字符串。


对于更新:假设您使用 PHP 来生成网页,您不能只发送正确的HTTP 标头来指定您的页面以 UTF8 编码吗?

于 2010-12-16T23:12:43.190 回答
0

UTF-8 是所有意图和目的的最佳选择。除非你有一个非常迫切的理由去选择 latin1(例如与其他应用程序的兼容性),否则就去吧。

有几种 UTF-8 排序规则可以不同地处理变音符号和排序顺序(请参阅此处获取列表)。您可能需要根据您的要求选择一个。不过,它们都可以存储变音符号。

于 2010-12-16T23:12:36.907 回答
0

我同意之前的答案,即 UTF-8 对于大多数应用程序来说是一个不错的选择。

不过,当心可能在等着你的陷阱!您需要注意在整个系统中使用一致的字符编码(输入表单、输出网页、可能访问或更改数据的其他前端)。

我花了一些不愉快的时间试图弄清楚为什么一个简单的 β 或 é 在我的网页上被破坏,却发现某处的某些东西弄错了编码。我什至见过通过多个编码器运行的文本案例——一旦将单引号变成八个字节。

最重要的是,不要假设会完成正确的翻译;在整个项目中明确说明字符编码。

编辑:我在你的更新中看到你已经开始发现这种特别的快乐。:)

于 2010-12-16T23:23:22.527 回答