当前位置: 首页 > 知识库问答 >
问题:

如何修复十六进制UTF-8字节字符(在latin1_swedish_ci表中)

诸修伟
2023-03-14

我有一个latin1_swedish_ci数据库,其中包含UTF-8字节字符,显示为%c5%a1,%c4%8d,...

我已经将数据库和表从latin1转换为utf8,但我仍然需要修复UTF-8字节字符。

ALTER DATABASE databasename CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE tablename CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

MySQL默认字符集:

SHOW VARIABLES LIKE  'char%'

character_set_client    utf8mb4 
character_set_connection    utf8mb4 
character_set_database  utf8mb4 
character_set_filesystem    binary  
character_set_results   utf8mb4 
character_set_server    latin1  
character_set_system    utf8    
character_sets_dir  /usr/share/mysql/charsets/  

我尝试了MySQL函数没有成功:

convert(cast(convert(name using  latin1) as binary) using utf8)

我真的需要帮助!谢谢.

共有1个答案

邓英卓
2023-03-14

你在使用PHP吗?是否存在对urlencode()的调用?不要。该函数仅用于构建url字符串。

让我们再检查一下你的桌子上有什么。执行选择十六进制(...)...--Pisarniska应变为(为清楚起见添加空格):

70697361726E69 C5A1 6B61   if correctly stored as utf8mb4 (or utf8)
70697361726E69 254335 254131 6B61   if urlencoded first
 类似资料:
  • 问题内容: 我在ex中有整数。16,我正在尝试将此数字转换为十六进制数字。我试图通过使用十六进制函数来实现此目的,但是每当您向十六进制函数提供整数时,它都会返回十六进制数字的字符串表示形式, 有人可以告诉我如何将字符串格式的十六进制数字转换为简单的十六进制数字。 谢谢!! 问题答案:

  • 问题内容: 我将数据存储在字节数组中。如何将这些数据转换为十六进制字符串? 我的字节数组示例: 问题答案: 使用: 或使用 注意: 在format语句中,表示在必要时最多填充2个前导s。这很重要,因为它将被格式化为而不是 或与配合使用: 这是Python 3.6.1中上述方法的基准: 结果: 使用的方法的确提供了其他格式选项,例如用空格,逗号,大写字母/等分隔数字,但是会影响性能。

  • 问题内容: 在对CSV文件进行编码的假设下运行了以前的文件。在此导入过程中,将多字节字符解释为两个单个字符,然后再次使用utf-8进行编码。 这种双重编码会产生类似的异常,而不是。 如何更正这些字符串? 问题答案: 下面的MySQL函数在双重编码后将返回正确的utf8字符串: 它可以与语句一起使用以更正字段:

  • 问题内容: 我有一个String数组。我想将其转换为字节数组。我使用Java程序。例如: 转换成: 我能做什么? 问题答案: 看一下样本,我想您的意思是字符串数组实际上是字节的十六进制表示形式的数组,不是吗? 如果是,那么对于每个字符串项,我将执行以下操作: 检查字符串是否仅包含2个字符 这些字符的间隔为‘0’..‘9’或’a’..’f’(还要考虑其大小写) 将每个字符转换为相应的数字,减去代码值

  • 问题内容: 我有这个字符串:我想使用Python作为打印它。 仅适用于整数。 怎么做到呢? 问题答案: 您可以将字符串转换为int生成器,对每个元素应用十六进制格式,并使用分隔符插入: