The problem is creating the right path concatenating from left to right from right to left

I greatly simplified the problem and here is a sample code:

string outputString = string.Empty;
string joinOutputString = string.Empty;
string pathOutputString = string.Empty;

string[] myStrings = new string[4];
myStrings[0] = "First entry";
myStrings[1] = "اول";
myStrings[2] = "دوم";
myStrings[3] = "Last entry";

StringBuilder sb = new StringBuilder();

for (int i = 0; i < myStrings.Length; i++)
{
    joinOutputString = string.Join(@"\", joinOutputString, myStrings[i]);
    outputString = string.Format(@"{0}{1}\", outputString, myStrings[i]);
    pathOutputString = System.IO.Path.Combine(pathOutputString, myStrings[i]);
    sb.Append(string.Format(@"{0}\", myStrings[i]));
}

The final value of all strings and StringBuilder at the end of the loop:

First entry \ اول \ دوم \ Last entry \

instead

First entry \ دوم \ اول \ Last entry \

The middle part from right to left is inverted as one unit.

Thanks for your time in advance.

+3
source share
2 answers

bidi (, LTR, RTL), .NET LTR RTL . "" . , LTR ( " " ), RTL (3 myString [1] + "\" + 3 myString [2]), LTR ( " " ).

myString [0] ( LTR), myString [1] ( RTL), myString [2] ( RTL), myString [3] ( LTR)

, ( myString [1] + "\" + myString [2]) RTL , , . LTR ( Unicode 0x200E), .

http://en.wikipedia.org/wiki/Bi-directional_text

:

joinOutputString = string.Join("\\\x200E", joinOutputString, myStrings[i]);

, \is escaped\\x200E - LTR.

+5

System.IO.Path.Combine(myStrings);

.

+1

Source: https://habr.com/ru/post/1780949/


All Articles