我怀疑你有几个问题。
实际上有几种常用的方法来表示日文和中文文本,使用传统编码(用于日文的 Shift_JIS、EUC-JP 和 JIS 变体,以及用于中文的其他几种)或 Unicode(UTF-8 或 UTF-16)。对于多语言应用程序,首选的解决方案是以 UTF-8 传输页面内容;Windows 本身更喜欢以 UTF-16 存储内容(这是 MS SQL Server 中使用的 NTEXT 和 NVARCHAR)。
为了使日语内容正确显示,您需要确保在数据管道的每个阶段都发生正确的转换。让我们假设您为了理智而使用 Unicode,但如果您有意选择使用 Shift-JIS、big5、gb2312 或其他东西,答案将是相似的,只是更复杂。
如果您的数据主要来自 Web 表单,则需要确保将代码页设置为 65001,通常使用每个 ASP 文件顶部的 <%@codepage=65001%> 指令。
此外,您需要向您的用户代理(Web 浏览器)提示您正在使用 UTF-8。有两种技术,一种涉及 HTTP 标头;另一种涉及 HTTP 标头。另一种选择是使用元标记伪造 HTTP 标头。
元标记解决方案:
HTTP 标头解决方案,使用我生疏的 ASP 技能(假设是 javascript,但您可能使用的是 vbscript,这需要您删除分号) Response.ContentType="text/html"; Response.Charset="utf-8";
如果您在提要而不是 Web 表单中将数据导入 MSSQL,您还需要确保数据被正确转换。根据您的导入机制,指定源编码的方法会有所不同,因此我将不得不将其留作“读者练习”。
接下来,在将数据提交到 SQL Server 时,您需要确保使用正确的 SQL 输入机制。如果您没有对查询进行参数化(并且应该这样做),则在将文本参数放入查询时,您需要记住使用 N'MyText' 表单而不是 'MyText'。如果您正在参数化您的文本,当您使用 adVarChar 时,您应该改用 adVarWChar。(每种 ADO 数据类型都有对应的“W”类型)。
此外,一些浏览器使用 HTML LANG 属性作为提示,以适合内容语言的字体显示文本。如果您碰巧知道您的内容使用哪种语言,您可以将 LANG="ja-jp" 添加到任何 HTML 元素(包括 BODY)。然后浏览器应该使用该语言的合理默认字体(但如果您愿意,可以明确指定一种)。即使您为特定语言选择了不合适的默认字体,过去 5 年中制造的大多数浏览器都会执行一些字体链接魔术,但如果您使用合适的字体,您将获得更可靠的结果和稍微更好的渲染性能。
作为附加说明,如果您在浏览器上手动强制编码为 shift-jis 时得到几乎正确的结果,这意味着您可能正在使用 windows-1252 作为您的字符集 <%@codepage=1252%> 并且您很幸运,内容并没有完全混乱。有一些黑客可以恢复软管的 Shift-Jis-in-1252 或 iso-8859-1,但它们不是 100% 可靠的。
至于 SQL server 上的排序规则,这有两个影响。在 NVARCHAR 和 NTEXT 字段上,它只影响排序和查询(包括区分大小写、重音和假名)。在 varchar 和 text 字段上,它也会影响编码,但这不是解决您的问题的最明智的方法。