Displaying strings from.NET resource files may be a puzzle if the strings include escape sequences. For example, take the newline (linefeed) character. Suppose you want to display a hardcoded text in a Message Box, you might write your C# code as follows:
string myString = "Show me on the first line \nShow me on the second line";
The escape sequence \n
represents a linefeed character (0x000A
), which displays the text on two lines.
Now, suppose that you moved the text in double quotes to the string resources in your .resx file and tagged it with the keyNameForMyString tag. You could write the code to get the text back as follows:
ResourceManager resman = new ResourceManager(
string myStringFromResx = resman.GetString("keyNameForMyString");
The value of the myStringFromResx
string would now be seen as:
@" Show me on the first line \nShow me on the second line".
The above verbatim representation is an equivalent to:
"Show me on the first line \\nShow me on the second line".
In another example, if the text in the string resources is as follows:
This "word1" on the first line \nThis "word2" on the second line,
the value of the myStringFromResx string is seen as:
"This \"word1\" on the first line \\nThis \"word2\" on the second line"
In both examples, the linefeed escape sequence"\n"
is turned to "\\n"
, which, of course, is not what you want.
You could try to substitute \\n with \n, in the code like this:
myStringFromResx = myStringFromResx.Replace("\\n," "\n");
This works well, but it may incur yet another problem, when myStringFromResx
includes a path like:
In that case, you don't want to replace \\n
One possible solution is to use a "special" token instead of \n, when you're interring a multiline text in a resource file. Then replace it with \n after it returns with a GetString() call.