【发布时间】:2018-06-04 22:52:06
【问题描述】:
我在 Linux Debian 上,我正在尝试通过从我的数据库 linux_krozki 中提取一些信息来打印 PDF。为此,我首先创建了具有utf8mb4 字符集和utf8mb4_slovenian_ci 排序规则的数据库。
我没有使用utf8 字符集和基于this topic 的utf8_slovenian_ci。
MariaDB [(none)]> SHOW CREATE DATABASE linux_krozki;
+--------------+-------------------------------------------------------------------------------------------------------+
| Database | Create Database |
+--------------+-------------------------------------------------------------------------------------------------------+
| linux_krozki | CREATE DATABASE `linux_krozki` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_slovenian_ci */ |
+--------------+-------------------------------------------------------------------------------------------------------+
所以现在我用这样的信息填充数据库表skupine - 请注意opombe 列中的字母ž:
当我想使用 LuaLaTeX 和 LuaSQL 编译 PDF 文档时,由于该字符 ž:
! String contains an invalid utf-8 sequence.
l.1 Mo
en dostop za invalide, prepoved kajenja.
l.39 Opombe: & \luadirect{skupina_opombe(arg[3])}
这很奇怪,因为我的源文件 predracun.lua 和 predracun.tex 都是 UTF-8 编码的:
这里是predracun.tex源文件:
\documentclass[12pt]{article}
% package for UTF-8 encoding
\usepackage[utf8]{luainputenc}
% package for lua
\usepackage{luacode}
\directlua{dofile('predracun.lua')}
\begin{document}
\begin{tabular}{rp{11cm}}
ŽžĐđŠšĆćČč\\
\luadirect{skupina_opombe()}\\
\end{tabular}
\end{document}
这里是predracun.lua源文件:
function skupina_opombe ()
package.cpath = package.cpath .. ";/usr/lib/x86_64-linux-gnu/lua/5.3/luasql/mysql.so"
luasql = require('luasql.mysql')
env = assert (luasql.mysql())
con = assert (env:connect("linux_krozki","ziga","Slovenija123"))
cur = assert (con:execute("SELECT opombe FROM skupine WHERE id_skupine = (SELECT id_skupine FROM predracuni WHERE id_interesa =1);"))
vnos = cur:fetch ({}, "a")
tex.print(
string.format([[%s]], vnos.opombe)
)
end
我还在predracun.tex 中明确指定了\usepackage[utf8]{luainputenc}。那么为什么我仍然得到错误?请注意,错误不是由特殊字符 ŽžĐđŠšĆćČč 触发的,而是由从数据库中读取的 \luadirect{skupina_opombe()} 触发的......
PS:我不确定是否应该在 TeX 社区上发布这个主题,因为它是 TeX 和编程语言 Lua 的混合体。
【问题讨论】:
-
如果我用
Ž、š或Š替换字母ž,症状是一样的,但是如果我用Đ、đ、Ć替换它,ć,PDF 将被编译,但这些字母将在 PDF 中显示为?。 -
我想我可能会错过这个:dev.mysql.com/doc/refman/5.7/en/charset-connection.html 但我不确定如何在我的 Lua 文件中实现它。
-
获取字符串的十六进制,如果
ž变成9E,则字符在latin1/cp1250。如果你得到C5BE,那么你就有utf8/utf8mb4。 -
这可以使用像 Okteta 或 Bless 的十六进制编辑器来检查!好主意!
标签: mysql encoding utf-8 lua latex