1

我构建了一个内容管理工具,允许产品团队创建和管理导出到网站的产品,并允许不同的设计师团队为显示相同产品数据的报纸制作平面广告。

我的问题在于 InDesign 图形设计师和他们在 InDesign 中使用的宏。宏能够复制/粘贴文本/数据并根据某些字符的存在自动格式化 InDesign 中的文本。特别是设计团队在他们的宏中使用制表符、“软换行”(换行)和常规换行(硬换行)。

现在,我在 java 类中生成一个包含记录和所需格式字符的文本块,然后通过 DWR 将其发送到客户端。当需要我发送 \t 的制表符时,返回是 \r 并且我希望软换行符是 \n 但是 InDesign 似乎将 \r 和 \n 都视为常规换行符。

直到昨天,当我遇到 Unicode \u2028(软换行符)和 \u2029(常规换行符)时,我才放弃能够通过软返回。我尝试输出这两个字符而不是 \r 和 \n,希望 InDesign 可以以不同的方式看待这些字符。在设计师从中复制输出的框中,看起来那里没有字符。在我指定 \u2028 出现的地方根本没有换行符。当我将输出复制/粘贴到文本编辑器中时,它显示那里有一个无法识别的字符(它显示为一个带有问号的框)。

平台是运行在 Tomcat 上的 Java/MySQL。

迄今为止,我不必在这个应用程序中过多地处理字符编码。标头已<meta charset="utf-8" />设置,但到目前为止就是这样。我尝试将其设置为 utf-16,但它不会改变输出。MySQL 数据库中的所有表都设置为 utf8/utf8_general_ci。

想法?如何强制 InDesign 复制/粘贴文本并识别其所有支持宏的字符?实际上,它只是无法识别的软换行符。帮助!:)

谢谢你。对不起,这么久!

瑞安五世

4

2 回答 2

2

我一直在玩 ID CS6 (OS X) 一段时间,但我一辈子都无法将粘贴的 LF 识别为强制换行符。LF 和 CR 和 CRLF 都进入分段符。U+2028 和 U+2029 显示为空字形,而不是中断。

我有点担心将其发布为答案,但我会试一试:

您可以考虑将文本作为下载的 .txt 文件提供。CS5 引入了“标记文本”(一种完全支持 InDesign 字符、属性等的 XML 式文本文档),因此这意味着您的设计师将能够放置文本文件,而 InDesign 将按照预期处理所有内容。

要将现有文本转换为 CS5+ 的标记文本(请参阅此处的参考),请在第一行添加一个<ASCII-MAC><ASCII-WIN>(视情况而定)并使用反斜杠转义任何 '<' 或 '>',然后您就可以自由使用<0x000A>as强制换行。(字面意思是这 8 个字符)

这可能是过度杀戮,但它肯定是我能想到的最愚蠢可靠的方式。如果我有其他工作,我会编辑。

注意。“强制换行”是 InDesign 本身用于 Shift+Enter 生成的字符的术语,即您的“软换行”;与标准回车的“分段符”形成对比。InDesign显然用 LF (U+000A) 表示强制中断,用 CR (U+000D) 表示段落中断。

于 2013-11-25T05:15:52.070 回答
1

我不确定您是如何尝试传输和打印字符的(如果您发布 DWR 和 javascript 代码,我可能会提供更多帮助),但我会尝试的一件事是确保您的 java 输出是实际的 UTF -8 使用类似的东西:

String yourRecordString = "Some line 1. \u2028Some line 2.";
ByteBuffer bb = Charset.forName("UTF-8").encode(yourRecordString);  

然后,您可以将字节写入bb输出流/文件并检查它们。(确保将它们写为字节,而不是字符串或字符。)例如,的 UTF-8 编码\u2028is E2 80 A8,因此您应该在输出中的适当位置看到该序列。(我在 vim 中使用 hexmode 来处理这样的事情。)

然后,确保在 javascript 端接收到这些字节。(虽然我不是 DWR 专家,但我可能更喜欢让你的 java 函数返回字符串以外的东西。)

这至少应该可以帮助您诊断问题所在。如果您确实看到该序列并且 InDesign 仍然无法识别软换行符,那么您至少知道问题出在 InDesign 并且您必须找到其他解决方案(例如修改设计器的宏以识别其他字符)。

(另外,请注意,您可以使用 . 查看 JVM 的默认编码Charset.defaultCharset()。我的猜测是您的默认编码不是UTF-8,并且 InDesign 也可能由于字节序或类似原因而对您尝试的 UTF-16 有问题.)

于 2013-11-25T04:06:40.120 回答