写出文件的编码

写出文件的编码

我有一个 tex 文件,其中包含:

\usepackage[utf8]{inputenc}

\begin{something}该文件调用一个宏,将和之间的内容保存\end{something}到文件中。但文件的编码不是utf8。有没有办法设置输出文件的编码(如果需要,我可以重写宏)。

宏是:

\def\@something[#1]{%
    \gdef\@somethinginclude{#1}
    \immediate\openout\@out=\@outname.tmp
    \newlinechar='15
    \begingroup \catcode`\^^M=12 %
    \let\do\@makeother\dospecials\obeyspaces%
    \@xsomething
}

\def\endsomething{%
    \endgroup
    \immediate\closeout\@out
}

编辑

我已经简化了宏:

\RequirePackage{fancyvrb}

\newenvironment{something}
{
    \VerbatimOut{\@outname.tmp}}
{
    \endVerbatimOut
}

这样代码就简单多了,但是编码还是不对,好像是使用了内部表示。

答案1

\usepackage[utf8]{inputenc}当设置了高位的字符时,它们会被激活,而 verbatim 环境不会改变这一点。你可以自己做:

我将此文件命名为hernan.tex,因此输出文件将是hernan.out

\documentclass[a4paper]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[italian]{babel}

\usepackage{fancyvrb}

\newenvironment{writefile}[1]
 {\deactivateeightbit\VerbatimOut{#1.out}}
 {\endVerbatimOut}
\makeatletter
\newcommand{\deactivateeightbit}{%
  \count@=127
  \loop
    \catcode\count@=12
    \ifnum\count@<255
    \advance\count@\@ne
  \repeat
}
\makeatother

\begin{document}
Questo è il mio testo.

\begin{writefile}{\jobname}
àèì
\end{writefile}

\end{document}

的内容hernan.out

àèì

如果我看着它,LESSCHARSET=ascii less hernan.out我会得到这个

<C3><A0><C3><A8><C3><AC>

显示正确的UTF-8。

相关内容