如何在测试网站时重新创建这些特殊字符?

时间:2015-07-28 09:07:41

标签: html utf-8 internationalization

我们在英国网站上有一个“联系我们”表格,可以生成一封电子邮件。来自欧洲国家的一些用户正在输入公司名称,例如“Törner”和“Ómicron”,该网站正在正确处理这些字符。像“João”这样的名字没有任何问题。

偶尔,我们会得到一个看起来很疯狂的人名或公司名称:

  

KovovÃÆ'Æ•••••†  ÃƒÂ¢Ã¢â€šÂ¬Ã¢â€ZA¢ÃƒÆ'ƒâ€Ã,   ÃƒÆ'Ã,¢Ã¢ââ,¬Å¡Ã,¬Ã¢¢?â,¬Å¾Ã,¢ÃÆ'ƒÀ   Ã¢€央行“¢ÃƒÆ'Ã,¢Ã¢â€â,¬Å¡Ã,¬ÃâšÃ,   ÃƒÆ'ƒÀšÃ,¢ÃÆ'Ã,¢Ã¢â‚¬Ã...¡Ã‚Ã,¬ÃÆ'Ã,¢Ã¢ââ€SA ¬A...¾Ã‚Ã,¢ÃÆ'ƒÀ   Ã¢€央行“¢ÃƒÆ'â€央行   ÃƒÂ¢Ã¢â€šÂ¬Ã¢â€ZA¢ÃƒÆ'ƒÀšÃ,¢ÃÆ'Ã,¢Ã¢â‚¬Ã...¡Ã‚Ã, ¬ÃƒÆ'â€â,¬Â|Ã↚Ã,¡ÃÆ'Ã’À   Ã¢€央行“¢ÃƒÆ'Ã,¢Ã¢â€â,¬Å¡Ã,¬Ãâ†|Ã,¡ÃÆ'ÃՉۈ ...¡ÃÆ'â€â,¬Å¡ÃƒâšÃ,½roba   Navalany

幸运的是,这个人进行了第二次调查,这次文本只是:

  

kovovyroba Navalany

谷歌透露,索尔维亚有一个名叫KovovýrobaNavalaný的地方。如果我尝试将其粘贴到我们的网站,它可以正常工作。另一个问题来自德国,其中一个变音符号变成了数百个奇怪的字符。再次,我自己的测试没有问题。

我的问题是:我如何重新创建输入,这似乎会将单个字符气球变成486个字符的乱码?一旦我可以自己导致错误,我可以在我的代码中找到该位置我在哪里处理文本很糟糕。我用最疯狂,最奇怪的土耳其语,俄语和汉字粘贴,没有任何问题。

3 个答案:

答案 0 :(得分:1)

当我在PhpMyAdmin中查看文本字段时,有时会得到此字符串而不是撇号: Ã⢢‚¬â„¢¢p

字段类型设置为文本,排序规则为utf8_general_ci。

在我的xojo应用程序中,我从MSSQL服务器检索文本,并且撇号显示为’。 (在SQL管理器中,撇号正常显示)。 稍后,我将文本存储在MySQL的上述字段中,结果如图所示。看起来像您的情况。

看起来字符转换正从'到’到ƒƒ¢¢¢¢â€šÂ¬Ã¢â€ž¢¢复合。 这并不能解释其原因,但确实为您提供了重现效果的途径。

答案 1 :(得分:1)

@MagnusSmith从现场获取测试时,您可能想尝试完全定义编码。

请记住,Xojo中的字符串不一定已定义编码。您可以使用String.Encoding对其进行测试,然后分别使用String.ConvertEncodingString.DefineEncoding对其进行转换或定义。

答案 2 :(得分:0)

似乎正在发生的事情是,utf8字节被解释为latin1字符,然后转换为utf8。重复很多次。

我经常看到这种错误是由于MySQL的错误配置而发生的,但从未发生过。在艾伦的例子中:

’     E28099
’     C3A2 E282AC E284A2
’  C383C2A2C3A2E2809AC2ACC3A2E2809EC2A2
’

在原始问题中:

ý        C3BD
ý       C383 C2BD
ý     C383 C692 C382 C2BD
ý C383 C692 C386 E28099 C383 E2809A C382 C2BD
(etc)

(至于是什么过程在反复执行令人讨厌的行为,我不知道。)

关于撤销契约。这是使用MySQL撤消一步的示例:

SELECT CONVERT(BINARY(CONVERT('ý' USING latin1)) USING utf8mb4)
                          --> 'ý'

(我没有“循环播放直到完成”的好方法。)

至于为什么某些字符可以,有些则不能,我看不到模式。

ãöÓ可以吗?但是ý’不好吗?有趣的是,ãöÓ在latin5中具有编码,而其他两个则没有。 (A,这与有用的模式相反。)

Magnus-难道是像Allan所建议的那样,重复提取并再次存储了字符串吗?