【问题标题】:ResourceManager.GetString gives localization with wrong encodingResourceManager.GetString 提供错误编码的本地化
【发布时间】:2016-02-02 11:59:32
【问题描述】:

我使用ResourceManager 在我的网络表单应用程序中本地化字符串。该应用程序支持en-ussv-se。字符串是从各自的资源文件中正确提取的,但是当它们显示时,unicode 字符会作为垃圾值出现。

resources.sv-se.restext

...
ContactInfoFormatPrimary={0} (primär)
...

输出

获取资源的代码:

ResourceManager resourceManager  = GetResourceManager(...)
...
text = resourceManager.GetString(resourceId);

我试过调试代码,返回的文字是{0} (prim�r)

是什么导致资源解码不正确?

更新:

我能够在控制台应用程序中使用相同的架构并获得正确的字符串,我需要处理与应用程序配置相关的任何事情吗?

【问题讨论】:

  • 显示在 where (网络/桌面)以及使用什么字体?这通常是字体或输出编码问题。
  • 看起来不像是字体问题,因为VS的调试窗口显示的一样。
  • 输入字符串时出错。 Crystal Ball 说您正在使用文本文件而不是 .resx 文件进行本地化,并且它们没有 BOM。
  • 我使用restext 文件进行本地化。
  • 您确定将restext 文件保存为UTF-8 或UTF-16?

标签: c# encoding localization resource-files resgen


【解决方案1】:

您很可能没有将资源文本文件(.txt.restext)保存为UTF-8UTF-16/Unicode。请参阅MSDN documentation of Resgen.exe 中的以下段落:

包含资源的文本文件必须以 UTF-8 或 Unicode (UTF-16) 编码保存,除非它仅包含基本拉丁语范围内的字符(到 U+007F)。 Resgen.exe 在处理使用 ANSI 编码保存的文本文件时会删除扩展的 ANSI 字符。

检查文本文件的编码的最简单方法是在Notepad 中打开它,单击File 菜单中的Save as... 并检查Encoding 下拉菜单中显示的内容在右下角。它应该设置为UTF-8Unicode

修复编码,只需在NotepadSave as... 对话框中选择UTF-8Unicode,然后点击Save 覆盖原始文件。

【讨论】:

  • 我用notepad++>>编码>>转换为utf-8。感谢您的领导。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-18
  • 2017-01-03
  • 2019-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多