【问题标题】:How to encode newlines in vCard 4.0 parameter values: ^n or \n?如何在 vCard 4.0 参数值中编码换行符:^n 或 \n?
【发布时间】:2013-12-11 01:07:37
【问题描述】:

vCard 4.0 RFC 6350 表示属性参数值中的换行符必须编码为 \n(至少对于 ADR 属性的 LABEL 参数):

  The property can also include a "LABEL" parameter to present a
  delivery address label for the address.  Its value is a plain-text
  string representing the formatted address.  Newlines are encoded
  as \n, as they are for property values.


  ADR;GEO="geo:12.3457,78.910";LABEL="Mr. John Q. Public, Esq.\n
  Mail Drop: TNE QB\n123 Main Street\nAny Town, CA  91921-1234\n
  U.S.A.":;;123 Main Street;Any Town;CA;91921-1234;U.S.A.

但是 vCard 4.0 RFC 6350 由 'Parameter Value Encoding in iCalendar and vCard' RFC 6868 更新,其中说:

  formatted text line breaks are encoded into ^n (U+005E, U+006E)

  GEO;X-ADDRESS="Pittsburgh Pirates^n115 Federal St^nPitt
  sburgh, PA 15212":geo:40.446816,-80.00566
  being used

如何将 vCard 4.0 参数值中的换行符编码为 \n 或 ^n?

【问题讨论】:

    标签: encoding escaping newline vcf-vcard carddav


    【解决方案1】:

    看实际语法:

    param-value = *SAFE-CHAR / DQUOTE *QSAFE-CHAR DQUOTE
    

    vCard/iCalendar(很遗憾)不支持属性属性值中的通用转义。如 RFC 6868 中所述:

    未定义用于属性文本值的 \-转义机制 用于参数值

    (这是 RFC 6868 的重点)。

    LABEL 是特殊的并且明确指定支持\n:

    该属性还可以包含一个“LABEL”参数来呈现一个 地址的收货地址标签。它的值是纯文本 表示格式化地址的字符串。换行符被编码为 \n,因为它们用于属性值。

    这仅适用于 LABEL。

    回答您的问题:“如何将 vCard 4.0 参数值中的换行符编码为 \n 或 ^n?”

    您首先查看参数的值是否以特殊方式指定,例如 LABEL。如果是这样,请按照对参数的描述对其进行编码。如果不是,请通过 ^ 对其进行编码。

    【讨论】:

      猜你喜欢
      • 2013-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-03
      • 2011-08-22
      • 1970-01-01
      • 2021-12-11
      相关资源
      最近更新 更多