字符编码输出到linux中的文件

时间:2013-06-05 18:02:08

标签: character-encoding

工作环境是jboss + mssql

我正在进行查询并将格式化结果输出到文本文件。查询结果有一些法语重音字符。

在我的本地机器上,一切正常,但在UAT服务器(linux box,UTF-8)上,法语口音字符成为问号。

有谁知道如何解决它?

1 个答案:

答案 0 :(得分:0)

这取决于您创建文件的方式 - 代码示例会有所帮助。

如果您明确指定了编码,例如在创建Writer时,如果它与您查看文件的机器的区域设置不匹配,您可能会看到问号,占位符框等,而不是重音字母。您可以使用locale命令检查您的语言环境,这样就可以了解相关的字符编码。这只是查看文件的问题。您说该框是UTF-8,但确保该应用程序也在UTF-8语言环境下运行 - 您的用户控制台和服务器应用程序可能使用不同的语言环境。

如果在编写时没有指定字符编码,通常最终会使用系统的语言环境。在这种情况下,可能会发生此区域设置不支持您需要的字符,因此它们将替换为占位符。解决方案是更改运行应用的区域设置,例如通过导出相应的LC_*环境变量。

所以,简短的清单是这样的:

  • 你如何写你的文件?是否明确指定了编码?
  • 应用程序运行的语言环境是什么(locale命令的输出)?
  • 使用od -t x1命令或使用mc中包含的十六进制查看器,检查写入文件的实际字节数。问号是实际问号(十六进制代码3F),还是其他一些字符?如果它们占用一个字节,则它们可能处于Latin-N(ISO 8859-N)编码之一。如果它们占用多个字节,则可能是UTF-8(我理解字母a-z看起来很正常,所以它不是UTF-16)。