RTL和LTR特殊字符

orentu

新成员
加入
2019年11月4日
消息
2
编程经验
5-10
HY.

我使用RTL和LTR角色,因为我有英语与希伯来语



str1 = heb +" "//////修复长度--->例如长度= 30,空间 - >30-len(heb)

str1 = RTL + str1 /// heb向左

str2 = ENG +" "//////修复长度--->例如长度= 20,空间 - >20-len(heb)

str2 = ltr + str2 /// Eng左右

strall = str1 + str2

自我放置隐藏的Charater以来,固定长度发生变化的问题

Lenght 30现在是更多的Veause Divent RTL / LTR转向32

我的问题是:



我需要导出到TXT文件ASCII

我如何逃脱特殊的魅力,但不会删除新的方向?

谢谢
 

跳伞运动员

工作人员
加入
2019年4月6日
消息
2,877
地点
切萨皮克,va.
编程经验
10+
Huh? Can you show us your actual code? How did you end up with strAll having a length of only 32. It should be 52.

以下应为真:
C#:
str1.Length == 31
str2.Length == 21
strAll.Length == 52

无论如何,添加Unicode代码点长度字符串。您无能为力,因为它是字符串长度是字符串中的实际代码点数,而不是UI中的字符串的呈现长度。

请参阅关于字符串的本节 正常化。从榜样中有:
  • U+1EAF
  • U + 0103 U + 0301
  • U + 0061 U + 0306 U + 0301
即使它们都表示呈现的字符串,每个都会分别为1,2和3的长度"ắ" .
 

跳伞运动员

工作人员
加入
2019年4月6日
消息
2,877
地点
切萨皮克,va.
编程经验
10+
我得到52 ......
capture.png.


这是我用来测试的代码:
C#:
const string LRM = "\u200E";
const string RLM = "\u200F";

static void ShowStringDetails(string name, string s)
{
    Console.WriteLine([email protected]"{name}: ""{s}""");
    Console.WriteLine($"{name}.Length: {s.Length}");
}

static void Main(string[] args)
{
    var heb = "מזל טוב";
    var str1 = $"{heb,-30}";
    ShowStringDetails(nameof(str1), str1);

    str1 = RLM + str1;
    ShowStringDetails(nameof(str1), str1);

    var eng = "mazel tov";
    var str2 = $"{eng,-20}";
    ShowStringDetails(nameof(str2), str2);

    str2 = LRM + str2;
    ShowStringDetails(nameof(str2), str2);

    var strAll = str1 + str2;
    ShowStringDetails(nameof(strAll), strAll);
    MessageBox.Show(strAll, strAll.Length.ToString());
}
 
最后编辑了主持人:

奥伦托

新成员
加入
2019年11月6日
消息
2
编程经验
5-10
HY.
我的意思是当我导出到文本固定长度
职位
从20到22(20 + 1 staralCharac)和30到31(30 + 1 SpecialCharac)的变化
如果我想将文本文件导入msaccess,则存在问题:

POS ---------长度
1 ------- 20(不是Inc空间21)
22 ------- 30(不是自21空间以来的21个)
在访问权限中,当我熄灭固定长度不能从上一个和第一个开始差距
在这种情况下:
20---22

我可以回到20或30吗?由于应该是20°和21的固定长度
 

跳伞运动员

工作人员
加入
2019年4月6日
消息
2,877
地点
切萨皮克,va.
编程经验
10+
为什么你甚至必须坚持在LRM或RLM字符中?大多数现代文本渲染器将自动检测到需要呈现RTL的文本,并且需要呈现LTR的英文文本。

所以基本上你是僵局。要么粘在将改变字符串长度的方向标记中,或者您不会将其放入并修复不知道如何处理BIDI文本的下游的任何内容。
 

跳伞运动员

工作人员
加入
2019年4月6日
消息
2,877
地点
切萨皮克,va.
编程经验
10+
午餐后,还有另一种选择。由于下游是unicode的无知,而Bidi,你可以使用更少的空间。例如。
代替
C#:
var heb = "מזל טוב";
var str1 = $"{heb,-30}";
str1 = RLM + str1;

var eng = "mazel tov";
var str2 = $"{eng,-20}";
str2 = LRM + str2;
相反:
C#:
var heb = "מזל טוב";
heb = RLM + heb;
var str1 = $"{heb,-30}";

var eng = "mazel tov";
eng = LRM + eng;
var str2 = $"{eng,-20}";
 

sh

众所周知的成员
加入
2018年9月5日
消息
1,982
编程经验
10+
如果您使用的是另一个编辑引擎(无论是什么),一旦它来自这个时代,外部软件就会分别自动更正任何HEBREW输入。所以为什么你在你的申请中添加它们并不是对我来说真的很清楚,或者也许告诉我我错过了什么。您可以添加LTR标记的唯一原因是如果您正在加入或更好的单词连接字符串,这些字符串是英语和希伯来语,以便在向外部应用程序发送这些值时保留文本呈现订单,即访问或其他。否则,您应该让访问本身。
 
最佳 底部