JSL 中特殊字符的最佳实践?example="blah blah Width = 25.0 �m ..some more stuff";
widthtext=regex(example,"Width\s=\s+\d+[.]\d+\s[\w?�]m");<BR /><BR />widthtext=regex(example,"Width\s=\s+\d+[.]\d+\s[\w?\x{FFFD}]m");抱歉,这不是一个非常具体的问题,而是一个我正在寻找建议的一般问题,因为我在不同的情况下遇到过这个问题。
在这个特定的示例中,我使用 loadtextfile() 来获取一些我需要解析的文本,并且该文本可以包含特殊字符。在这里,我使用变量“example”来展示 JMP 的外观 - 它已用“神秘”符号替换了某些内容。 (如果它没有继续出现在这里,它是一个带有问号的黑色菱形。)我知道该符号是unicode FFFD(并且我知道在这种情况下,最初它是一个μ,对于微米,尽管不确定JMP 无法计算出它的具体编码是什么)。我知道加载文本文件时使用的字符集首选项中有一些选项,所以也许我可以反复试验,直到它真正显示为 mu。但由于我的脚本正在查看很多不同的文件,我不确定我是否可以设置一个首选项,以免出现无法计算出角色的问题,无论如何,我的问题实际上是如何谈论任何特殊的问题我的剧本中的角色,而不是用“神秘”代替“mu”。
在上面的示例中,我粘贴了 JMP 日志中显示的字符,以便将其包含在 JSL(RegEx 代码的第二行)中。这样可行。contains() 也可以将特殊的小玩意作为参数粘贴到其中。但是,当我保存 JSL 并重新打开它时,特殊字符会替换为 ?并且使用粘贴符号的代码不再有效。似乎 JSL 中的任何特殊字符都有丢失的风险。
我的第三行是修复正则表达式的问题。我可以按数字调出字符,以便它在打开后运行 - 在这种情况下,我打开一个文本文件并在其中包含这些符号,而不是硬编码示例。 但是如果我想做任何其他字符串事情怎么办?到目前为止,我将 contains() 转换为 regex() 但还有其他方法可以在 JSL 中使用符号吗?
关于 JMP 在其报告中使用的希腊字母(如西格玛),我也遇到过类似的问题。我想编写代码来测试报告中的某些文本,但如果我粘贴符号,JSL 将被替换。这些是 JMP 正在选择和使用的符号,但我无法在 JSL 中可靠地使用它们。
回复:JSL 中特殊字符的最佳实践?谢谢!回复:JSL 中特殊字符的最佳实践?是的
x = "\!U266b";
Show( x ); // "♫"
y = Char To Blob( x, encoding = "utf-16be" );
Show( Hex( y ) ); // "266B"
如果您看到 Unicode 替换字符(黑色菱形中的问号),那么您可能还有其他字符映射到替换字符。 如果可能,找到正确的字符集以避免多对一问题。
可能有比上面的代码片段更聪明的方法。 CharToBlob 函数将字符转换为 16 位大端 Unicode 表示形式,Hex 函数将 blob 转换为可打印的十六进制。
如果您没有为 CharToBlob 指定编码字符集,它将默认为 UTF-8,对于这个特定字符,您将获得一个 3 字节值“E299AB”八分音符的 fileformat.info 页面
回复:JSL 中特殊字符的最佳实践?谢谢!我缺少的一点是如何在正则表达式之外的 JSL 中以一种不会在 JSL 文件中被替换的方式谈论这一点,我从你的示例中看到这是如何......
“\!UFFFD”
这提出了一个相关的问题,即字符是什么,并不是我希望 JMP 找到正确的字符集来打开文件(整个其他问题),而是我想讨论 JSL 中 JMP 使用的字符并且在关闭和打开文件时 JSL 不会损坏。
在这种情况下,我很容易地查找了该字符,并找到了一个可以识别它的代码,并且它可以在 JMP 中工作。 假设我在日志中包含 JMP 中的字符(也许 JMP 确实找到并报告了 mu 字符,或者说它是 JMP 本身在报告中使用的 sigma - 对于将解析某些文本的代码,我只关心 JMP 中使用的字符是什么该文本)...是否有任何直接方法可以获取 JMP 实际使用的字符的代码(如“UFFFD”)?就像是这是什么字符(“�”) 。当我不断遇到这个问题时,我通常可以看到并复制并粘贴 JMP 使用的字符,这就是我想在 JSL 中详细讨论它的上下文。
谢谢!
回复:JSL 中特殊字符的最佳实践?菱形问号是 Unicode 替换字符。
JMP 更喜欢 Unicode,但可以猜测其他字符集,并取得不同程度的成功。
JMP 还可能在重新保存文件时尝试保留文件的字符集,但如果文件具有在输入字符集中无效的字节序列,它们将成为替换字符,并且将成为中的问号非 Unicode 字符集转换。 (我认为您的示例中发生了一些变化。)
您有可能选择正确的字符集(首选项),也有可能该文件使用非 Unicode 字符集中的 mu,同时声称是带有字节顺序标记的 Unicode 文件。
有许多网站可以非常轻松地获取 Unicode 十六进制数据;我在这里使用了 Windows 字符映射表:
Unicode escapeUnicode escape统一码转义
(编辑)如果您再次打开该文件,我建议尝试以 Windows 1252 作为起点。 我认为加载文本文件具有用于指定字符集而不使用首选项的选项。
Set it back to Best Guess when doneSet it back to Best Guess when done完成后将其设置回最佳猜测