zoukankan      html  css  js  c++  java
  • linux 下 Linux 下char转换为wchar_t 设置本地为utf-8编码 以及wchar 的输入输出

    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 character.  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 }
  • 相关阅读:
    5月12日上课笔记-js 弹出框、函数、程序调试、基本事件、浏览器对象模型
    5月11日上课笔记-js简介
    5月9日上课笔记-网页定位、网页动画【HTML5】
    用IO字节流复制文件-CopyFileByIo
    5月8日上课笔记-浮动float
    5月5日上课笔记-盒子模型【HTML5】
    @RequestParam,@PathParam,@PathVariable,@QueryParam注解的使用区别
    vue-router 的配置
    VSCode自定义代码片段(模板)
    使用通用 Mapper 依据数据表生成实体类
  • 原文地址:https://www.cnblogs.com/wulangzhou/p/4538910.html
Copyright © 2011-2022 走看看