VB6中怎么输入商标符号(TM)?

nancysmith 2008-04-07 09:33:48
从别的地方复制到Vb开发环境中显示的是?。
我的目的是想替换掉一串字符串中的商标符号。
请高人指导一下。
比较着急。
...全文
1311 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
meiZiNick 2008-05-01
  • 打赏
  • 举报
回复
有点难度哦
m60a1 2008-04-13
  • 打赏
  • 举报
回复
晕???????????-_- ~~~~~~~
nicon 2008-04-12
  • 打赏
  • 举报
回复
用Unicode应该可以
舉杯邀明月 2008-04-12
  • 打赏
  • 举报
回复
商标字符
舉杯邀明月 2008-04-12
  • 打赏
  • 举报
回复
你要的是这个字符吗?

cbm6666 2008-04-08
  • 打赏
  • 举报
回复
去找特殊字符放大吧, R 的商标就自己画个大圆, 中间放个R 就好啦.....

nancysmith 2008-04-08
  • 打赏
  • 举报
回复
cbm666 说的什么意思,没有明白
东方之珠 2008-04-08
  • 打赏
  • 举报
回复
支持一把!
nancysmith 2008-04-07
  • 打赏
  • 举报
回复
So Long, 看得我是比较头晕。明天再看
用户 昵称 2008-04-07
  • 打赏
  • 举报
回复
特殊字符的输出问题 iostream中输出®如何输出

wstring str;
TCHAR ch[]= {0x00AE,0x0000};
str = ch;
wcout<<str<<endl;

其中0x00AE为®的unicode编码,®为一个圈,中间是一个R,即注册标记的意思。
找了半天,没有找到怎么打印出来这个。





回复内容
【thinkinnight】:
汗,特殊字符为一个圈,中间是一个R,即注册标记的意思
在CSDN上面似乎显示不出来

【HewpKanXue】:
®
mark

【chenyu2202863】:
帮你顶

【thinkinnight】:
自己再up一下

【HewpKanXue】:
哈哈,好高兴啊,终于发现原因了,是控制台输出的代码页设置问题
我们用中文的代码页一般是936,而936上没有UNicode 码\u00ae对应的定义,所以没法显示
而英文的代码页对应的的就有。所以只要将输出设备的代码页改过来就好了。
我们只要找到随便找到一个代码页,对应表上有这个字符的定义就可以用。
我们就用英文的1252好了,例子:

#include "stdafx.h"
#include <fstream>
#include <iostream>
#include <string>
#include <windows.h>
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
wstring str;
TCHAR ch[]= {0x00AE,0x0000};
str=ch;
setlocale(LC_ALL,".1252");
int original_codepage=GetConsoleCP(); //保存原设置。
int oCodePage =GetConsoleOutputCP();
SetConsoleCP(1252);
SetConsoleOutputCP(1252);

wcout<<L'\u00e0'<<'\n';
wcout<<L'\u00e1'<<'\n';
wcout<<L'\u00e2'<<'\n';
wcout<<L'\u00e3'<<'\n';
wcout<<L'\u00e4'<<'\n';
wcout<<L'\u00e5'<<'\n';
wcout<<L"\u00ae"<<'\n';
wcout<<str<<endl;
wcout<<str.c_str()<<endl;
wcout<<ch<<endl;

setlocale(LC_ALL,"C"); //恢复现场
SetConsoleCP(original_codepage);
SetConsoleOutputCP(oCodePage);
system("pause");
return 0;
}

说明: 例子里用到了设置控制台代码页的API函数,在platform SDK里面。


【thinkinnight】:
呵呵,上面这位兄弟,多谢你的回答,我也是怀疑代码页的问题,不过对这个不熟,没有查到相关的资料。
你的程序我试了,的确是可以运行的。但是,实在不好意思,其实是一个比较连贯的问题,我将其分解了,只提出一部分,结果这个解决了,又出现新的问题。
我的输出是使用locale('chs')的,因为我同时也需要输出中文,

TCHAR ch[] = {0x00AE,0x0000};
TCHAR ch2[] = _T("紫光拼音");
wstring str = ch;
wstring str2 = ch;
wcout.imbue(locale("chs"));
wcout<<str<<endl;
wcout<<str2<<endl;

我试用了你的程序之后,发现中文又显示不出来了,难道就没有两全其美的方法吗?

这个的确是比较奇怪,其实也是今天做一个小程序的时候发现的,我说一下我这个问题的背景吧,我是写一个根据输入读注册表,然后删除相关键值的小程序的,打印出来遍历的键值是为了方便调试,但是一开始发现中文无法输出,这个问题已经解决了,就是使用wcout.imbue(locale("chs"));来设置一下,不过又发现了在键值中有特殊符号,这就是我提这个问题的原因了。

因为程序是在另一台机器上,现在没有。但是具体的环境为winxp英文版, VS2005英文版,本地的设置是设置为"china"的。

【thinkinnight】:
帖子我肯定会结的,不过我希望能够再保留一段时间,看看对于这整个问题,有没有什么解决的方法,多谢!

【thinkinnight】:
而且我发现,在word中输入中文和刚刚的特殊字符是可以的,不知道它是怎么实现的

【HewpKanXue】:
wstring str=L"y原来可以直接支持Unicode的API\u00AE自己\r\n";
TCHAR ch[]= {L"ayUnicode看来是必然的选择的API\u00AE高兴\r\n"};
DWORD len=0;
WriteConsole(GetStdHandle(STD_OUTPUT_HANDLE),ch,lstrlen(ch),&len,NULL);
WriteConsole(GetStdHandle(STD_OUTPUT_HANDLE),str.c_str(),lstrlen(str.c_str()),&len,NULL);

【thinkinnight】:
good,要的就是这个效果,不知道老兄是怎么查的资料,呵呵
但是wcout为什么就是显示不出来,而writeconsole就能够显示呢?这个原理还是没有搞清楚

【thinkinnight】:
现在又发现一个奇怪的地方,writeconsole是可以打印出来的,但是重定向功能没有了,于是google了一下,发现writefile可以做,但是使用writefile代替后,又是乱码了
先使用的是代替1: WriteFile(GetStdHandle(STD_OUTPUT_HANDLE),str.c_str(),lstrlen(str.c_str()),&len,NULL);
发现不行之后,又去查了一下,修改为
WriteFile(GetStdHandle(STD_OUTPUT_HANDLE),str.c_str(),lstrlen(str.c_str())*sizeof(TCHAR),&len,NULL);
结果还是不行

这个能否解决呢?多谢多谢

【thinkinnight】:
问题已经找到,看来单一的方案是无法解决的,
writefile在写文件的时候,需要在文件头加上0xfeff来表明是unicode文件,但是在标准输出的时候,却没有办法加上这个标志,于是似乎就是不可能的了。
已经生成正确的unicode文件成功了,
方法就是加上这个文件头。

现在的方法只能是先创建一个unicode的文件,然后向里面写了。

多谢上面兄弟的回答,结贴

【HewpKanXue】:
哭,早说清楚啊
看我blog上,有写Unicode文件的方法。
你只是要写文件,何必在控制台上折腾呢,写文件和控制台使用的codecvt方式不同。
所以多字符集使用控制台和文件是有区别的。
本地化的结果也不同,而只有对ASCII字符集才没有区别。


【thinkinnight】:
我本来是想输出在控制台,然后使用重定向写到文件中查,这样一个是比较方便,还有就是可以比较灵活的切换,既可以在控制台看,也可以在文件中看。不过看来只是一个美好的愿望了,正如ls所说的“多字符集使用控制台和文件是有区别的”,所以只能分别对待了。
呵呵,不好意思了。

【thinkinnight】:
在这里找到一个,不过还是只能显示中文
http://blogs.msdn.com/junfeng/archive/2004/02/25/79621.aspx

DWORD dwBytesWritten=0;
int noutputcp = GetConsoleCP();
int charCount = WideCharToMultiByte(noutputcp,0,str.c_str(),-1,0,
0,0,0);
char* szaStr = (char*) malloc(charCount);
WideCharToMultiByte(noutputcp,0,str.c_str(),-1,szaStr,charCount,
0,0);
WriteFile(GetStdHandle(STD_OUTPUT_HANDLE), szaStr, charCount-1, &dwBytesWritten, 0);
free(szaStr);

似乎writefile写到标准输出的时候,使用的是ANSI集

【thinkinnight】:
说错了,应该是WideCharToMultiByte转换的时候就转换出错了


nancysmith 2008-04-07
  • 打赏
  • 举报
回复
ascii 码表里面是没有这个的
用户 昵称 2008-04-07
  • 打赏
  • 举报
回复
用chrw$(ascii码)来表达。

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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