请问在标准c++里怎么用cout流输出unicode字符串?

ljhhh0123 2004-04-14 07:36:12
请问在c++.net下这样的程序用unicode编译能正确输出字符串吗?
#include<iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
_TCHAR* me = L"skdfksdjalfksakd";
wout << me << endl;
return 0;
}
...全文
1502 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
diaojianxiang 2004-07-12
  • 打赏
  • 举报
回复
学习
qiqi162002 2004-07-10
  • 打赏
  • 举报
回复
up
aixuer 2004-07-10
  • 打赏
  • 举报
回复
学习
rorot 2004-07-10
  • 打赏
  • 举报
回复
iconv
peter9606 2004-07-06
  • 打赏
  • 举报
回复
gz
simbas00 2004-07-06
  • 打赏
  • 举报
回复
学习中。。。
expert2000 2004-07-06
  • 打赏
  • 举报
回复
#define UNICODE
#include <iostream>
#include <fstream>
using namespace std;

int main(void)
{
std::wcout.imbue(std::locale("chs"));
wchar_t *me = L"哈哈";
wcout << me << endl;
return 0;
}
在DEV-C++ 4.9.8.0 中编译出错。
`wcout' undeclared in namespace `std'
`wcout' undeclared (first use this function)
为什么?
fuyifan 2004-07-05
  • 打赏
  • 举报
回复
study
oldjackyone 2004-07-05
  • 打赏
  • 举报
回复
偶保持沉默....

看看偶的一个实例:

http://www.cnblogs.com/oldjacky/archive/2004/06/10/14748.aspx
gernal_dn 2004-07-02
  • 打赏
  • 举报
回复
to mailxt():
wchar_t me = L"哈哈"; //wchar_t *me = L"哈哈";
congcongguoke 2004-07-02
  • 打赏
  • 举报
回复
在 叶落知秋 的代码段前头再加上#define UNICODE

#define UNICODE
#include <iostream>
#include <fstream>
using namespace std;

int main(void)
{
std::wcout.imbue(std::locale("chs"));
wchar_t me = L"哈哈";
wcout << me << endl;
return 0;
}
angelboycn 2004-06-12
  • 打赏
  • 举报
回复
wcout
hwndhwnd 2004-06-12
  • 打赏
  • 举报
回复
wcout
unicode用wcout
oldjackyone 2004-06-10
  • 打赏
  • 举报
回复
同意: goodname(叶落知秋)
mailxt 2004-06-10
  • 打赏
  • 举报
回复
#define UNICODE

#include <iostream>
#include <tchar.h>

int main(void)
{
TCHAR me[] = _TEXT("哈哈");

std::wcout << me << std::endl;

return 0;
}
mailxt 2004-06-10
  • 打赏
  • 举报
回复
goodname(叶落知秋)的代码我在.NET 2003下编译通不过啊
: error C2440: “初始化” : 无法从“const unsigned short [3]”转换为“wchar_t”
该转换要求 reinterpret_cast、C 样式转换或函数类型转换
hslinux 2004-06-09
  • 打赏
  • 举报
回复
d:\dotnet\test\test.cpp(16): fatal error C1010: 在查找预编译头指令时遇到意外的文件结尾
这是什么意思?编译下面程序段出的错误。。。

#include "tchar.h" //头文件定义了_TCHAR
#include<iostream>

using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
_TCHAR* s1 = L"skdfksdjalfksakd";
wcout << s1 << endl;

//使用下面的定义必须包含#include <string>
//wstring s2 =L"1234567890";
//wcout << s2 << endl;
return 0;
}
新自由呼吸 2004-05-08
  • 打赏
  • 举报
回复
看看
HEARTWORD7708 2004-05-08
  • 打赏
  • 举报
回复
还是我来给你们上一课吧。首先按照c99支持unicode字符集,这里指内存中的字符编码,c++当然应该支持,这是毫无疑问的。但是unicode的外部表示如utf7,utf8,utf8n,utf16le,utf16be等等外部存储格式,c++委员会显然没有理由理会这些东西,作为世界上最帅的stl库sgi-stl3.3外带的IO流库认为自己没有义务实现各种各样的字符编码的转换。事实上这样做会导致stl-io库对操作系统的严格区分,结果必然是舍了一群孩子才套了一只狼。所以,sgi-stl声明除了标准的“C”别的一概不予理会。结果是如果我们使用sgi-stl而又不提供新的诸如c_local_stub_win32.cxx这样的基于windows的c-locale底层接口的实现,像goodname那样用什么locale都不管用。说到这里,如果你在使用stl-port,stl-port4.6比sgi-stl的野心大多了,孩子肯定是舍了,狼大约也没套多。我并没有做过stl-port4.6使用其他locale的例子,但我想,他的表现大约会像微软的p.j.先生的stl一样帅吧。bcb6,cbx部署的stl库恰好就是stl-port的某个版本,如果按照goodname的办法不能成功,那么很不幸stlport又少套了一只狼。
如果你在使用ms的p.j.先生的stl,那么你很幸运,因为你想要什么,微软都会给你的。大体上goodname的代码应该行的通。不过正如微软的座右铭:给你需要的,但请不要看明白我是怎么做的。虽然微软公开stl源代码,但我宁愿自己从没有看过那个东西。本人甚至都在怀疑微软使用过什么给这些代码加上1024位的密。使用微软的产品就像生活在Newyork一样:即在地狱又在天堂。
说到这里还没有说到重点,实际上stl-io流在处理内部字符流和外部数据流间的互转换时,使用自带的locale中指定的codecvt*对象,其中的do_in,和do_out实现转换,按照sgi-stl的实现,“c”完成内部的wchar_t和外部的char转换时不会考虑10646更不会考虑其他任何形式的mbcs,事实上c++标准根本就不认识这些东西。所以当你想要输出汉字时,每个汉字的高位都被丢弃,很不爽吧,解决的办法就是继承一个codecvt重写do_in,do_out在里面用psdk的功能完成unicode到mbcs的转换,使用那个代码页管用,你就自己试试吧。
wingfiring 2004-04-15
  • 打赏
  • 举报
回复
有没有那位老大在BCB下面用过wcout?
我在BCB6, cbx下面从来都没有输出成功过。
那位老大能给出BCB下面的解决方法,送200分。
加载更多回复(5)

24,854

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧