无法解析带有重音字符的二维码

无法解析带有重音字符的二维码

我正在尝试使用qrcode包和luaLaTeX引擎在 QRcode 中编码捷克名称。一些重音符号被编码在 QRcode 中,而阅读器(QR Code Reader 或 QR Extrme,均在 Xperia L1 上运行)无法解码它们并尝试重新聚焦。相同大小的正确 QR 码在几秒钟内被解码。

有没有什么办法可以修复这些失效的字符?QR 码可以对此类字符进行编码。

基于 MWEAlan Munn 的回答

\documentclass{article}
\usepackage{fontspec}
\usepackage[english,french,czech]{babel}
\usepackage[]{qrcode}
\begin{document}

\qrcode[]{í}% produces no error, resolved

\bigskip
\qrcode[]{š}% produces no error, unresolved

\bigskip
%Dummy text containing all the weird czech characters.
\qrcode[]{Příliš žluťoučký kůň úpěl ďábelské ódy}% Unresolvable

\end{document}

可解析的虚拟文本由goqr.me包含奇怪的字符:
佩里什·扎贝尔斯克

相同的文本经过 MWE 编码后,代码无法解析:
在此处输入图片描述

答案1

您可以使用 expl3 将输入转换为字节:

 \documentclass{article}
 \usepackage{fontspec}
 \usepackage{expl3}
 \usepackage[]{qrcode}
 \begin{document}
 \ExplSyntaxOn 
  \str_set_convert:Nnnn \l_tmpa_str {Příliš~žluťoučký~kůň~úpěl~ďábelské~ódy}{}{utf8/bytes}
  \exp_args:No\qrcode{\l_tmpa_str}
 \ExplSyntaxOff 
 \end{document}

在此处输入图片描述

添加

以下适用于 pdflatex 和 lualatex。它假定文件是 utf8 编码的,并且输入不包含命令。有两个特殊输入:\\强制换行和\%提供百分号字符。

\documentclass{article}
 \usepackage{xparse}
 \usepackage[forget]{qrcode}
 \makeatletter
 % for pdftex is it needed to suppress the writing of arbitrary bytes to the aux:
 \def\qr@writebinarymatrixtoauxfile#1{}%
 \makeatletter

 \ExplSyntaxOn
  \cs_generate_variant:Nn \str_set_convert:Nnnn {Nnno}
  \tl_new:N\g__ufqr_convert_method_tl
  \seq_new:N\l__ufqr_tmpa_seq
  \seq_new:N\l__ufqr_tmpb_seq
  \sys_if_engine_pdftex:TF
   {
    \tl_gset:Nn\g__ufqr_convert_method_tl {}
   }
   {
    \tl_gset:Nn\g__ufqr_convert_method_tl {utf8/bytes}
   }
 \NewDocumentCommand \unicodeqrcode { m }
    {
      \tl_set:Nn \l_tmpa_tl { #1 }
      \regex_replace_all:nnN {\c{\%}}{\cO\%} \l_tmpa_tl

      \seq_clear:N \l__ufqr_tmpa_seq
      \seq_clear:N \l__ufqr_tmpb_seq
      \exp_args:NNno\seq_set_split:Nnn \l__ufqr_tmpa_seq { \\ } { \l_tmpa_tl}
      \seq_map_inline:Nn \l__ufqr_tmpa_seq
       {
        \str_set_convert:Nnno \l_tmpa_str { ##1 } {}{\g__ufqr_convert_method_tl}
        \seq_put_right:No\l__ufqr_tmpb_seq {\l_tmpa_str}
       }
     \exp_args:Nx\qrcode{ \seq_use:Nn \l__ufqr_tmpb_seq {\tl_to_str:N \? } }
    }

\ExplSyntaxOff
 \begin{document}
 \unicodeqrcode{Umlaute: äüö\\Zweite &$_\^\% Zeile\\Grüße und ❤ und eine 

答案2

qrcode.tex说:

非 ASCII 字符

如果您将 csplain 与 pdfTeX 一起使用(没有 XeTeX,没有 LuaTeX),那么 UTF-8 输入将从 \qrcode 参数正确解释。

技术背景:在扫描 \qrcode 参数时,encTeX 的 \mubyte 被设置为零,因此该参数是原始的 UTF-8 编码,这对于 QR 码来说是正确的。

问题:

  1. 您不能在另一个宏中使用 \qrcode{parameter},因为 UTF-8 编码的参数已经被重新编码。
  2. 您不能使用 XeTeX 或 LuaTeX,因为 UTF-8 编码的参数已重新编码为 Unicode。并且此处未在宏级别实现从 Unicode 到 UTF-8 的反向转换。

就我的情况而言,这两个问题都是无法避免的。

相同的代码,除了一行\usepackage{fontspec}产生以下结果:

在此处输入图片描述

相关内容