我想用俄语显示我的内容,但是我是用简体中文字符集编译的,为了俄语环境能更好地看出我显示的是什么,我在代码中加入了setlocale(LC_ALL, "ru"),ru代表了俄语,这样当程序放到俄语字符集环境时就能把代码内容变成俄文,我想的是这样,这样就不能乱码了,但是实际不是。
#include<iostream>
#include"game.h"
using namespace std;
int main() {
int n;
cin >> n;
if (n == 866) {
mode();
}
return 0;
}
#include<iostream>
#include"game.h"
using namespace std;
void mode() {
setlocale(LC_ALL, "ru");
char Interface[12][61] = { "**********************************************",
"* *",
"* ----------------------- *",
"* | ван цзыдоу | *",
"* ----------------------- *",
"* *",
"* | Powered By YANG,KUAN CHIO | *",
"* *",
"* ->начать игру *",
"* продолжать игру *",
"* языкlanguarage *",
"**********************************************" };
for (int i = 0; i < 12; i++) {
for (int j = 0; j < 58; j++) {
cout << Interface[i][j];
}
cout << endl;
}
}
这是两个源文件,我在简中936代码页中编译它,当然文件字符集选的UTF-8带签名。文件编译成功后,系统换成俄语866代码页,然后运行这个程序,并没有显示上面的页面,而是杂七杂八的文字。我很想做这个,帮帮我,谢谢,我会很感恩你
俄语的话可以试试wchar_t类型,如果可以望采纳!谢谢🙏
文件字符集是UTF-8就不要换成俄语866代码页了
你要用俄语866代码页,文件字符集就应该用cp866 ,不是UTF-8
如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!
你的文件编码是UFT-8
,这意味着,你在代码文件里写的任何字符串,都是utf-8
编码的。 在没有转换的情况下,使用代码页866自然是会乱码,因为866对应的是ANSI 俄语字符编码集;文件中的字符串,对应的是 ANSI-utf8编码集。两个编码集不兼容,只有显示转换的情况下,才能正常输出。
需要正常输出字符串,可以将code page 转换为65001。关于windows code page:
https://docs.microsoft.com/en-us/windows/win32/intl/code-page-identifiers
换成这样试试呢 ?举个例子
#include <iostream>
#include <locale>
using namespace std;
int main()
{
setlocale(LC_ALL, "RUSSIAN");
cout << "Кирилица" << '\n';
system("pause");
return 0;
}
望采纳
setlocale:
函数原形为:char *setlocale( int category, const char *locale );
头文件:<locale.h>
所支持的操作系统为:ANSI, Win 95, Win NT
对于简体中文可以使用如下设置:setlocale( LC_ALL, "chs" );
为什么一定要调用setlocale呢?
因为在C/C++语言标准中定义了其运行时的字符集环境为"C",也就是ASCII字符集的一个子集,那么mbstowcs在工作时会将cstr中所包含的字符串看作是ASCII编码的字符,而不认为是一个包含有chs编码的字符串,所以他会将每一个中文拆成2个ASCII编码进行转换,这样得到的结果就是会形成4个wchar_t的字符组成的串,那么如何才能够让mbstowcs正常工作呢?在调用mbstowcs进行转换之间必须明确的告诉mbstowcs目前cstr串中包含的是chs编码的字符串,通过setlocale( LC_ALL, "chs" )函数调用来完成,需要注意的是这个函数会改变整个应用程序的字符集编码方式,必须要通过重新调用setlocale( LC_ALL, "C" )函数来还原,这样就可以保证mbstowcs在转换时将cstr中的串看作是中文串,并且转换成为2个wchar_t字符,而不是4个。
本地化设置需要具备三个条件:
a.语言代码(Language Code)
b.国家代码(Country Code)
c.编码(Encoding)
本地名字可以用下面这些部分来构造:
语言代码_国家代码.编码 比如(zh_CN.UTF-8, en_US等)
locale的别名表见/usr/lib/X11/locale/locale.alias(以Debian GNU/Linux为例)
setlocale语言字符串参考