【发布时间】:2013-06-06 03:04:39
【问题描述】:
工作环境是jboss+mssql
我正在做一个查询并将格式化的结果输出到一个文本文件。查询结果中有一些法语重音字符。
在我的本地机器上,一切正常,但在 UAT 服务器(linux box,UTF-8)上,法语重音字符变成了问号。
有人知道怎么解决吗?
【问题讨论】:
工作环境是jboss+mssql
我正在做一个查询并将格式化的结果输出到一个文本文件。查询结果中有一些法语重音字符。
在我的本地机器上,一切正常,但在 UAT 服务器(linux box,UTF-8)上,法语重音字符变成了问号。
有人知道怎么解决吗?
【问题讨论】:
这取决于您如何创建文件 - 代码示例会有所帮助。
如果您确实明确指定了编码,例如创建Writer 时,如果它与您查看文件的机器的语言环境不匹配,您可能会看到问号、占位符框等,而不是重音字母。您可以使用locale 命令来检查您的语言环境,这样就可以学习相关的字符编码。这只是查看文件的问题。您说该框是 UTF-8,但请确保该应用程序也在 UTF-8 语言环境下运行 - 您的用户控制台和服务器应用程序可能使用不同的语言环境。
如果您在编写时没有指定字符编码,大多数情况下您最终会使用系统的语言环境。在这种情况下,可能会出现此语言环境不支持您需要的字符,因此将它们替换为占位符。一个解决方案是更改您的应用程序正在运行的语言环境,例如通过导出对应的LC_*环境变量。
所以,简短的清单是这样的:
locale 命令的输出)?od -t x1 命令或使用像mc 中包含的十六进制查看器检查写入文件的实际字节。问号是实际的问号(十六进制代码 3F),还是其他字符?如果它们占用一个字节,它们可能是拉丁-N (ISO 8859-N) 编码之一。如果它们占用超过一个字节,则可能是 UTF-8(我知道字母 a-z 看起来很正常,所以它不是 UTF-16)。【讨论】: