当前位置: 首页 > 面试题库 >

固定编码

马晓博
2023-03-14
问题内容

我最终在我们的mysql列之一中弄乱了字符编码。

通常我有

√©代替
é√∂代替ö√
≠代替í

等等…

可以肯定的是,这里有人会知道发生了什么以及如何解决。

更新: 根据bobince的答案,并且由于我将这些数据保存在文件中,因此执行了以下操作

#!/user/bin/env python
import codecs
f = codecs.open('./file.csv', 'r', 'utf-8')
f2 = codecs.open('./file-fixed.csv', 'w', 'utf-8')
for line in f:
    f2.write(line.encode('macroman').decode('utf-8')),

之后

load data infile 'file-fixed.csv' 
into table list1 
fields terminated by ',' 
optionally enclosed by '"' 
ignore 1 lines;

正确导入数据。

UPDATE2: Hammerite,为完整 起见 ,这里是所需的详细信息…

mysql> SHOW VARIABLES LIKE 'character_set%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | latin1                     | 
| character_set_connection | latin1                     | 
| character_set_database   | latin1                     | 
| character_set_filesystem | binary                     | 
| character_set_results    | latin1                     | 
| character_set_server     | latin1                     | 
| character_set_system     | utf8                       | 
| character_sets_dir       | /usr/share/mysql/charsets/ | 
+--------------------------+----------------------------+

SHOW CREATE TABLE对我导入到了表DEFAULT CHARSET=utf8

编辑3:

实际上,使用上述设置load 并没有 做正确的事(我无法与现有的utf8字段进行比较,并且我加载的数据 看起来
好像正确地加载了该数据;我认为是因为 错误,但是匹配了 客户端,连接和结果字符集),因此我将设置更新为:

+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       | 
| character_set_connection | utf8                       | 
| character_set_database   | utf8                       | 
| character_set_filesystem | binary                     | 
| character_set_results    | utf8                       | 
| character_set_server     | utf8                       | 
| character_set_system     | utf8                       | 
| character_sets_dir       | /usr/share/mysql/charsets/ | 
+--------------------------+----------------------------+

再次上传数据,然后最终我正确加载了数据(与现有数据相比)。


问题答案:

您的文本已编码为UTF-8,然后错误地重新解码为Mac
Roman

您将无法在数据库内部修复此问题,因为MySQL不知道Mac
Roman编码。您可以编写脚本来遍历每个受影响的表的每一行,并通过反转编码/解码周期来固定文本。Python是可能的,具有广泛的编码范围:

>>> print u'é'.encode('macroman').decode('utf-8')
é
>>> print u'ö'.encode('macroman').decode('utf-8')
ö
>>> print u'í'.encode('macroman').decode('utf-8')
í

或者,如果没有不受此问题影响的非ASCII内容,则可以尝试使用mysqladmin导出SQL转储,然后使用上述脚本或如果您使用文本编辑器(大概是)立即将其全部转换。
(在Mac上为Mac)),将脚本加载为UTF-8,然后将其另存为Mac Roman。最后,使用重新导入转储mysql < dump.sql



 类似资料:
  • 问题内容: 我已经有一段时间了,这似乎是一个Chrome重绘错误,尚未修复。因此,我正在寻找任何权宜之计。 主要问题是页面上的元素具有使用以下内容的背景图像时: 如果另一个元素固定并具有子视频元素,则它将导致具有背景图像的元素消失。 现在,它可以在Safari(以及Firefox和IE)中正常运行,因此这并不是Webkit的问题。我已经应用了一些没有用的建议属性。 目前,我的解决方案只是通过媒体查

  • 最早和最简单的技术之一是用于将多个进程加载到主内存中的是固定分区或连续内存分配。 在这种技术中,主存储器被分成相等或不同大小的分区。 操作系统始终驻留在第一个分区中,而其他分区可用于存储用户进程。 内存以连续的方式分配给进程。 在固定分区中, 分区不能重叠。 进程必须在分区中连续存在才能执行。 有使用这种技术的各种缺点。 1. 内部碎片 如果进程的大小较小,那么分区的总大小会导致分区的某些大小被浪

  • 问题内容: 好的,我注意到了一些东西,但是在CSS规范中找不到。样式化元素将相对于浏览器视口绝对定位。如果将固定位置的元素放置在另一个元素内会怎样?CSS示例如下: 和HTML: 据我所知,该元素相对于其最近的父元素也是固定位置的。这在所有浏览器中都可以使用吗?另外,它是错误还是故意行为? 到目前为止,我在互联网上没有找到关于此主题的任何内容,只是“固定位置使其固定在页面上”。 问题答案: 固定和

  • 主要内容:创建固定集合,固定集合查询固定集合是具有固定大小的循环集合,遵循插入顺序,以支持高性能的创建、读取和删除操作。通过循环,当分配给集合的固定大小用完时,它将删除集合中最旧的文档,而不提供任何显式命令。 如果更新导致文档大小增加,则固定集合会限制对文档的更新。由于固定集合是按磁盘存储的顺序存储文档的,因此可以确保文档大小不会增加磁盘上分配的大小。固定集合最适合存储日志信息、缓存数据或任何其他高容量数据。 创建固定集合 要创建一

  • Web设计师注定要处理很多未知的东西,如访问者使用哪一种浏览器,访问者的显示器尺寸是多少,等等。但是,设计师面临的最大问题,可能是要针对不同的显示器尺寸来创建引人入胜的设计。 针对这个问题,提出了三种基本的布局类型,分别是固定布局、流式布局和弹性布局。那到底是选择固定布局,还是流动布局,还是弹性布局?这个问题已经困扰了网页设计师们很多年了。最后的选择往往取决于需求,应该是哪种布局更适合,而不是哪种

  • 4.3. 会话固定 关于会话,需要关注的主要问题是会话标识的保密性问题。如果它是保密的,就不会存在会话劫持的风险了。通过一个合法的会话标识,一个攻击者可以非常成功地冒充成为你的某一个用户。 一个攻击者可以通过三种方法来取得合法的会话标识: l猜测 l捕获 l固定 PHP生成的是随机性很强的会话标识,所以被猜测的风险是不存在的。常见的是通过捕获网络通信数据以得到会话标识。为了避免会话标识被捕获的风险