【问题标题】:Convert single byte string to double byte string将单字节字符串转换为双字节字符串
【发布时间】:2014-04-29 19:22:26
【问题描述】:

我希望字符串Game 转换Game。该字符串为日文双字节字符串。

是否可以使用 PHP 来实现?如果有,怎么做?

【问题讨论】:

  • mb_convert_encoding() 与适当的编码一起使用
  • @MarkBaker:我会为 php 尝试这个 mb_convert_encoding() 但在 mysql 部分......有什么功能吗?因为我可能的解决方案将直接基于查询..
  • 如果您需要在 MySQL 中执行此操作,请使用 CONVERT() or CAST()
  • 什么编码? UTF-16?
  • @tadman:这更有可能是 UTF8 => PHP 中的 SJIS-win。或 utf8 => MySQL 中的 sjis(Shift-JIS Japanese)

标签: php unicode encoding


【解决方案1】:

你可以试试这个功能mb_convert_kana

【讨论】:

  • 这与我想要转换的相反。我想要这种转换 'Game' => 'Gamme'
【解决方案2】:

好吧,我不能确定我的问题是否正确,但以下控制台单行:

$ php -r 'var_dump(mb_convert_encoding("Game", "UCS-2"));'

给了我以下信息:

string(8) "\000G\000a\000m\000e"

这是你想要的吗?正如 Mark Ba​​ker 已经说过的,这只是 mb_convert_encoding 的情况。

【讨论】:

  • 您将如何确定使用哪种编码?也许使用 mb_detect_encoding?
  • 伙计,但是 you 将转换为多字节编码!我假设您可以控制输入字符串,并且知道要转换为哪种编码!例如,使用 Shift-JIS 或 EUC。我使用了 UCS-2,因为它保证完全是两字节 Unicode 编码,正如您所指定的那样。
  • 这仍然不能转换 Game => Game
【解决方案3】:

首先,Game 不是 ASCII 字符集,因此您可能需要设置页面 Content-type 标头才能看到正确的输出:

header("Content-type: text/html; charset=utf-8");

然后就可以用这个函数转换了

echo mb_convert_kana('Game', "R", 'UTF-8')

编辑:

对于 MySQL,我找不到一个转换器来做同样的事情。但是,你仍然可以在 Hex 级别上手动转换它,例如,你可以像这样得到单词Game

SELECT CHAR(0xefbca7, 0xefbd81, 0xefbd8d, 0xefbd85) as `Full Width`;

所以,我们可以在 MySQL 中编写一个映射函数,使用 table 替换字符

【讨论】:

  • @KraneBird:感谢您在 php 部分的回答......但是在 mysql 部分怎么样,有什么方法可以实现吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-10
  • 2011-12-10
  • 2012-07-26
相关资源
最近更新 更多