【问题标题】:character encoding output to a file in linux字符编码输出到linux中的文件
【发布时间】:2013-06-06 03:04:39
【问题描述】:

工作环境是jboss+mssql

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

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

有人知道怎么解决吗?

【问题讨论】:

    标签: character-encoding


    【解决方案1】:

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

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

    如果您在编写时没有指定字符编码,大多数情况下您最终会使用系统的语言环境。在这种情况下,可能会出现此语言环境不支持您需要的字符,因此将它们替换为占位符。一个解决方案是更改您的应用程序正在运行的语言环境,例如通过导出对应的LC_*环境变量。

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

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

    【讨论】:

      猜你喜欢
      • 2018-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多