在 .Net 资源文件(App_GlobalResources)中的回车换行符问题

106

我将多个文本保存在一个 App_GlobalResources.resx 文件中。

这些文本需要跨多行,并且我需要它们包含换行符。然而,当我读取这些内容时,所有的换行符都消失了(打印出的是 \r\n 而不是 CRLF 10 13 控制字符)。

我知道,我可以通过重新替换 \r\n(或者其他任何字符)回到 CRLF 来解决这个问题,但我想知道为什么这些明显针对文本的 resx 文件会忽略控制字符——而 CRLF 是相当重要的——是否有任何设置或其他方法可以使它自然地工作。

5个回答

176

我使用了VB.NET Express Edition来测试这个。

在资源编辑器中(您可以在其中指定资源的名称和字符串内容),将字符串内容用Shift+Enter分隔。

假设您想要输入

hello  
world

键入“hello”,然后按Shift+Enter,再键入“world”。

如果您查看Resources.Resx文件(这是一个xml文件),您可以看到它创建了一个带有属性xml:space =“preserve”的节点。

第二种选择

此外,您可以手动编辑Resources.resx并将内容修改为位于CDATA部分下。

假设您有名为“example”的字符串。在Resources.resx中搜索它并将内容更改为在其内部具有CDATA部分,而不是简单值。

例如:

<data name="example">
<![CDATA[
hello
world
1
2   3
4
]]>  </data>

3
我在寻找如何插入\t制表符的方法时发现了这个答案。我必须进入Visual Studio的XML文件选项卡设置中关闭“将制表符替换为空格”的选项(它会用若干个空格来代替制表符),这样我才能够在我的字符串中插入一个真正的制表符字符。 - Jon O
迟做总比不做好......在我认为 \n 是正确的方式之后。只需要进行50次更改! - Andez

37

使用 Shift+Enter 插入新行。


5
谁会想到。尝试了ctrl+enter,alt+enter。一致性微软! - Illuminati

22

当使用resx设计器界面时

  • 如果您实际在resx文件中输入文本,则可以使用如下快捷键:

    Shift+Enter

    正如其他答案所提到的。

  • 如果您要将文本粘贴到resx中,Visual Studio会以相同的格式粘贴文本(包括换行符/多行)。

当以XML格式打开resx文件时

(使用查找和替换定位resx文件..当您从“查找结果”面板中单击该文件时,VS将以XML格式打开resx文件)

在这里,您可以根据需要添加文本(在value标签中),并且格式将得以保留。


19

在我的情况下有效的解决方法是使用如下的 <br> 标签:

A text with a line break <br> and this goes in the second line.

这里有更多信息的帖子:在resx资源文件中添加换行符

如果您正在使用ASP.NET MVC的Razor视图引擎,则需要使用:

@Html.Raw(ResourceFile.ResourceString)

所以它以HTML格式打印<br>


11
如果你的资源字符串要用于 HTML,那么这个方法可以正常工作。但如果该字符串将以非 HTML 方式使用(例如作为桌面应用程序中提示工具或错误消息对话框的字符串),那么你在字符串中就只会得到 <br>。请注意不改变原意,使翻译内容更易懂,不提供额外解释。 - Peter Meyer
是的!但您可能需要像这样格式化它:<br/>请注意在关闭标签之前添加斜杠,以使其符合XML规范(因为所有XML标记都需要一个关闭标签)。 - Arno 2501

3
可以使用文本编辑器编辑*.resx文件并添加换行符。
甚至可以在Visual Studio中进行操作:
  • 右键单击资源文件
  • 点击“打开方式”
  • 选择“XML(文本)编辑器带编码”
  • 点击“确定”
  • 再次点击“确定”以进行编码选择(自动检测)
  • 搜索文本的名称(键)(例如“MY_TEXT”)
  • 编辑<value>标记内的文本。要换行,只需按Enter。注意:请删除换行符后面的前导空格。否则它们也会被插入。
已在Visual Studio 2017上测试过。 示例:
  <data name="MY_TEXT" xml:space="preserve">
    <value>Line 1
Line 2
Line 3</value>
  </data>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接