我正在尝试访问一些俄语 TeX 文件,但当我在 TeXstudio(或任何其他编辑器)中打开它时,文本无法读取。例如,这是来自一个文件的一行:
关于“定理”的补充:$a$, $b$, $c$,定理 $y=ax+b$, $y=bx+c$, $y=cx+a$ 定理适用于 ® ® 吗?
在 Stack Exchange 早期的主题中,曾建议将编辑器的字体编码从 UTF-8 设置为 windows-1251,但这在 TeXstudio 中似乎不起作用。
答案1
该文本似乎被编码为 CP866。根据维基百科上关于此编码的介绍:
代码页 866 (CCSID 866) (CP 866,“DOS 西里尔俄语”)是在俄罗斯的 DOS 和 OS/2 下用于书写西里尔文字的代码页。
您可以用 Python 等语言重新编码它:
mytext = "Ќ ©¤гвбп «Ё в ЄЁҐ а §«ЁзлҐ ўҐйҐбвўҐлҐ зЁб« $a$, $b$, $c$, зв® Їап¬лҐ $y=ax+b$, $y=bx+c$, $y=cx+a$ ЇҐаҐбҐЄ овбп ў ®¤®© в®зЄҐ?"
print(mytext.encode("cp1251").decode("cp866"))
代码首先将 utf-8 序列解释为单个字节(使用 cp1251,“标准”西里尔编码),然后将这些字节映射到 cp866。
这将打印(为方便阅读添加了换行符):
Н йдутся ли т кие р зличные вещественные числ $a$, $b$, $c$,
что прямые $y=ax+b$, $y=bx+c$, $y=cx+a$ пересек ются в одной точке?
翻译如下:
Are there different real numbers $a$, $b$, $c$
such that the lines $y=ax+b$, $y=bx+c$, $y=cx+a$ intersect in one point?
答案2
嗯,我用过https://2cyr.com/decode/弄清楚发生了什么事。
在 bash 中,你可以将文本保存为 utf-8 文件“t.txt”,然后调用 iconv
iconv -f utf-8 -t cp1251 t.txt | iconv -f cp866 -t utf-8
它产生
Найдутся ли такие различные вещественные числ $a$, $b$, $c$, что прямые $y=ax+b$, $y=bx+c$, $y=cx+a$ пересекаются в одной точке?
числ 应该是 числа,但其他东西对我来说看起来不错。
答案3
在您将代码粘贴到此处之前,一些字符可能已经变得无效(当尝试以错误的编码加载时)并被系统删除(或不可逆转地被另一个字符替换)。
原始文件显然保存在 CP866 中,您发布的不可读代码是尝试将其加载为 Windows-1251 的结果。
我发现每个西里尔字母“а”(保存为 CP866 但加载为 Windows-1251)都会变成不间断空格字符(ASCII:)0xa0
,然后在发布到某些网站时进一步被常规空格替换。
如果您有原始文件,您可以尝试在 Notepad++ 中打开该文件并选择编码 > 字符集 > 西里尔语 > OEM 866,然后您可以使用正确的编码复制/粘贴到其他地方。