7

我有一个带有 SHIFT_JIS 字符集的 ASP 经典页面。页面head部分下的meta标签是这样的:

<meta http-equiv="Content-Type" content="text/html; charset=shift_jis">

我的页面有一个文本框 (txtName),它应该只允许 200 个字符。我有一个验证字符长度的 Javascript 函数,该函数在我的提交按钮的 onclick() 事件中调用。

if(document.frmPage.txtName.value.length > 200) {
  alert("You have exceeded the maximum length of 200.");
  return false;
}

问题是,Javascript 没有获得以 SHIFT_JIS 编码的正确长度的日文字符。例如,字符测的 SHIFT_JIS 长度为 8 个字符,但 Javascript 仅将其识别为一个字符,可能是因为 Javascript 默认使用的 Unicode 编码。在 SHIFT_JIS 中,某些字符(如 ケ)有 2 或 3 个字符。

如果我只依赖 Javascript 提供的长度,长日文字符将通过页面验证并尝试保存在数据库中,然后由于 DB 列的最大长度为 200 而失败。

我使用的浏览器是 Internet Explorer。有没有办法使用 Javascript 获取日文字符的 SHIFT_JIS 长度?是否可以使用 Javascript 从 Unicode 转换为 SHIFT_JIS?如何?

谢谢您的帮助!

4

2 回答 2

10
于 2012-07-13T09:10:23.083 回答
0

您在字符和字节之间感到困惑。测是一个字符,但是你看它。在 UTF-16(这是 Javascript 使用的)中,它是两个字节。在 Shift_JIS 中,显然是 8 个字节。但在这两种情况下,它都是一个角色。因此,您要做的是将文本长度限制为 200 BYTES。由于 Javascript 使用的是 UTF-16(实际上是 UCS-2),您可以通过将字符串长度乘以 2 来获得它的字节长度,但这对 Shift_JIS 没有帮助。再说一次,如果你正在使用 Javascript,你可能应该考虑切换到 Unicode...

于 2012-07-13T09:09:27.387 回答