linux下Linux下char変換wchar_tローカルutf-8符号化およびwcharの入出力を設定
10279 ワード
LInuxでmbstowcs関数を使用すると、charをwchar_に変換できます.t関数の意味:convert a multibyte string to a wide char string説明:The behaviour of mbstowcs depends on the LC_CTYPE category of the current locale戻り値:The mbstowcs()function returns the number of wide characters that make up the converted part of the wide-char-acter string,not including the terminating null wide characters. If an invalid multibyte sequence was encountered, (size_t) -1 is returned.
1 #include <string.h>
2 #include <stdio.h>
3 #include <stdlib.h>
4 #include <wchar.h>
5 #include <locale.h>
6 #include <iostream>
7 using namespace std;
10 // char wchar13 // locale: ,mbstowcs src
11 int ToWchar(char* &src, wchar_t* &dest, const char *locale = "zh_CN.utf8"){
18 if (src == NULL) {
19 dest = NULL;
20 return 0;
21 }
23 // locale
24 setlocale(LC_CTYPE, locale);
26 //
27 int w_size = mbstowcs(NULL, src, 0) + 1;
29 //w_size=0 mbstowcs -1。 ( locale )
31 if (w_size == 0) {
32 dest = NULL;
33 return -1;
34 }
36 wcout << "w_size" << w_size << endl;
37 dest = new wchar_t[w_size];
38 if (!dest) return -1;
42 int ret = mbstowcs(dest, src, strlen(src)+1);
43 if (ret <= 0)return -1;46 return 0;
47 }
49 int main(){
51 char* str = " 123";
52 wchar_t *w_str ;
53 ToWchar(str,w_str);
54 wcout << w_str[0] << "--" << w_str[1] << "--" << w_str[2];
55 delete(w_str);
56 return 0;
57 }
1 #include <stdio.h>
2
3 int main(void){
5 int i_number, result;
6 float f_number;
7 char c_number, str[81];
8 wchar_t wc_str, ws_str[81];
10 printf( "
Enter an int, a float, two chars and two strings
");
12 result = scanf( "%d %f %c %C %s %S",
&i_number, &f_number, &c_number, &wc_str, str, ws_str );
13 printf( "
The number of fields input is %d
",
result );
14 printf( "The contents are: %d %f %c %C %s %S
",
i_number, f_number, c_number, wc_str, str, ws_str);
16 wprintf( L"
Enter an int, a float, two chars and two strings
");
18 result = wscanf( L"%d %f %hc %lc %S %ls",
&i_number, &f_number, &c_number, &wc_str, str, ws_str );
19 wprintf( L"
The number of fields input is %d
",
result );
20 wprintf( L"The contents are: %d %f %C %c %hs %s
",
i_number, f_number, c_number, wc_str, str, ws_str);
21 }