這是我參與新手入門的第3篇文章javascript
size_t mbstowcs(schar_t *pwcs, const char *str, size_t n) 複製代碼
參數說明java
返回說明數組
經過該函數能夠將多字節字符轉換成寬字符markdown
#include <stdio.h>
#include <locale.h>
#include <stdlib.h>
#include <wchar.h>
int main(void)
{
strcpy(utf8_str, "12345");
int strlen = 10;
size_t len = strlen(utf8_str) + 1;
wchar_t *wstr = malloc(len * sizeof(wchar_t));
if (!wstr) {
return -1;
}
len = mbstowcs(wstr, utf8_str, len);
wstr[len] = 0;
free(wstr);
return ret;
}
複製代碼
把寬字符把轉換成多字節字符串ide
size_t wcstombs(char *mbstr, const wchar_t *wcstr, size_t count);
複製代碼
參數說明函數
返回說明ui
#include <stdio.h>
#include <locale.h>
#include <stdlib.h>
#include <wchar.h>
int main(void)
{
Object str, newstr;
const size_t len = wcstombs(NULL, str->value.wstring, 0) + 1;
String_Realloc(newstr, len);
wcstombs(newstr->value.string, str->value.wstring, len);
}
複製代碼
Win:編碼
一、Unicode轉換爲ANSI使用:MultiByteToWideChar。
二、ANSI轉換爲Unicode使用:WideCharToMultiByte。
複製代碼
Linux:spa
寬字符轉多字符:code
size_t wcstombs(char *mbstr, const wchar_t *wcstr, size_t count );
複製代碼
多字符轉寬字符:
size_t mbstowcs(wchar_t *wcstr, const char *mbstr, size_t count );
複製代碼
須要注意的是,不一樣的平臺中,寬字節和多字節字符的實現方式不一樣,好比wchar_t 類型採用Unicode編碼方式實現,而Unicode其在Windows中爲utf-16,在Linux中爲utf-32。
而多字節有多種實現方式,如utf-八、ACSII等
所以,若是想要轉換成想要轉換的編碼,須要在調用前,調用setlocale()函數設置編碼方式,指定多字節編碼類型。