在VC++ 2003中,我可以将源文件保存为UTF-8,并且所有字符串都按原样使用.换句话说,以下代码将按字符串打印到控制台.如果源文件保存为UTF-8,则输出将为UTF-8.
printf("Chinese (Traditional)");
printf("??? (??)");
printf("??? (??)");
printf("Chinês (Tradicional)");
Run Code Online (Sandbox Code Playgroud)
我已经使用UTF-8 BOM保存了UTF-8格式的文件.但是使用VC2008进行编译会导致:
warning C4566: character represented by universal-character-name '\uC911'
cannot be represented in the current code page (932)
warning C4566: character represented by universal-character-name '\uAD6D'
cannot be represented in the current code page (932)
etc.
Run Code Online (Sandbox Code Playgroud)
导致这些警告的字符已损坏.适合语言环境的语言(在本例中为932 =日语)将转换为语言环境编码,即Shift-JIS.
我找不到让VC++ 2008为我编译的方法.请注意,我在源文件中使用的区域设置无关紧要.似乎没有一个语言环境说"我知道我在做什么,所以不要f $%## ng更改我的字符串文字".特别是,无用的UTF-8伪语言环境不起作用.
#pragma setlocale(".65001")
=> error C2175: '.65001' : invalid locale
Run Code Online (Sandbox Code Playgroud)
"C"也不是:
#pragma setlocale("C")
=> see warnings above (in particular locale is still 932)
Run Code Online (Sandbox Code Playgroud)
似乎VC2008强制所有字符进入指定的(或默认)语言环境,并且该语言环境不能是UTF-8.我不想更改文件以使用转义字符串,如"\ xbf\x11 ...",因为相同的源代码是使用gcc编译的,可以很好地处理UTF-8文件.
有没有办法指定源文件的编译应该保持字符串文字不变?
换句话说,在编译源文件时,我可以使用哪些编译标志来指定与VC2003的向后兼容性.即不要改变字符串文字,按字节顺序使用它们.
更新
感谢您的建议,但我想避免使用wchar.由于这个应用程序专门处理UTF-8中的字符串,因此使用wchar会要求我将所有字符串转换回UTF-8,这应该是不必要的.所有输入,输出和内部处理均采用UTF-8格式.这是一个简单的应用程序,在Linux和使用VC2003编译时工作正常.我希望能够使用VC2008编译相同的应用程序并使其工作. …
我试图使用Twitter OAuth,我的POST请求失败,出现401(Invalid OAuth Request)错误.
例如,如果我想发布新的状态更新,我将使用以下参数发送HTTP POST请求https://twitter.com/statuses/update.json-
status=Testing&oauth_version=1.0&oauth_token=xxx&
oauth_nonce=xxx&oauth_timestamp=xxx&oauth_signature=xxx&
oauth_consumer_key=xxx&in_reply_to=xxx&oauth_signature_method=HMAC-SHA1`
Run Code Online (Sandbox Code Playgroud)
我的GET要求一切正常.我可以在邮件列表上看到很多人遇到了相同的问题,但我无法在任何地方找到解决方案.
我正在使用oauth.pyPython库.
我有三个Web应用程序项目共享一个公共自定义服务器控件库.共享文件背后的代码很简单 - 它们被编译成一个dll,我使用项目引用在其他项目中引用它.但是我如何处理JavaScript,样式表和图像等文件?我试图这样做"Visual Studio方式",以便尽可能简单地理解和调试.
目前的设置有点像这样:
CommonControlsWebApp +- CustomControls +- resources +- images +- scripts +- stylesheets WebApp1 +- resources* WebApp2 +- resources* WebApp3 +- resources*
*)IIS中的虚拟目录.
每个Web应用程序上的虚拟目录都指向CommonControlsWebApp中的资源目录.这是在IIS中配置的.Visual Studio无法理解此链接,因此调试需要我手动附加到IIS进程.
另一种解决方案可能是使用WebResourceAttribute包含公共dll中的每个资源.但是src当我查看我的网页来源时,这会将链接转换为WebResource.axd?d = GUID,而我担心这会让调试变得非常混乱.
第三种解决方案是使用Subversion在所有三种解决方案中包含相同的文件.团队中没有人以前尝试过这个,所以我们不确定这会有多好.
我觉得我错过了一些关于如何设置项目的明显的解决方案.有什么建议?
我从这里读取旋转锁定代码,特别是这部分
inline void Enter(void)
{
int prev_s;
do
{
prev_s = TestAndSet(&m_s, 0);
if (m_s == 0 && prev_s == 1)
{
break;
}
// reluinquish current timeslice (can only
// be used when OS available and
// we do NOT want to 'spin')
// HWSleep(0);
}
while (true);
}
Run Code Online (Sandbox Code Playgroud)
为什么我们需要测试两个条件m_s == 0 && prev_s == 1?我认为只测试prev_s == 1就足够了.有任何想法吗?
编辑:版本2.如果有错误,我们应该以这种方式修复吗?
inline void Enter(void)
{
do
{
if (m_s == 0 && 1 == TestAndSet(&m_s, 0))
{
break;
} …Run Code Online (Sandbox Code Playgroud) 如果我们使用汇编语言
mov eax, dword ptr[ebx]
Run Code Online (Sandbox Code Playgroud)
那么它意味着复制ebx指向的值(ebx包含地址值,而不是实际值,此指令复制地址中的实际值)?
如果我们使用
mov eax, dword ptr[some_variable]
Run Code Online (Sandbox Code Playgroud)
那么它意味着将变量"some_variable"本身的值复制到eax,而不是复制变量"some_variable"指向的值?
我的理解是否正确?
如果是,我很困惑为什么相同的汇编指令有两种不同的含义 - 在第一种情况下有一个间接级别,但在第二种情况下没有额外的间接级别.
任何意见?
编辑:
并非每个[]都没有产生任何影响,例如,指令xchg将采用一个方向的水平,这将加载edx指向的值.
整个源代码可以从中找到,
http://www.codeproject.com/KB/threads/spinlocks.aspx
#ifdef WIN32
inline int CPP_SpinLock::TestAndSet(int* targetAddress, int nValue)
{
__asm {
mov edx, dword ptr [pTargetAddress]
mov eax, nValue
lock xchg eax, dword ptr [edx]
}
}
#endif // WIN32
Run Code Online (Sandbox Code Playgroud) 简单的问题,这是有效的C++:
class Foo
{
void Foo::doSomething();
};
Run Code Online (Sandbox Code Playgroud)
这个问题的观点:是重复使用的类名和双冒号的方法名前有效的内部类的声明?
我在编译使用g ++ 4.2.3执行此操作的代码时遇到问题.在挖掘和更改代码之前,我很想看到对这里描述语法的内容的引用.或者降级编译器; 这确实是用g ++ 3.3.6构建的.
我得到的错误是(大致):
Foo.h:3: error: extra qualification ‘Foo::’ on member ‘doSomething’
Run Code Online (Sandbox Code Playgroud)
我做了谷歌,但无法想出一些东西.我没有标准,即使我这样做也可能需要一段时间才能找到任何权威的东西.我不是C++语言律师.
基于寄存器的虚拟机如何工作?我正在寻找基于寄存器的虚拟机如何工作的介绍.有人可以帮忙吗?
谢谢.
在iPhone Developer Program Portal中,有一个视频演示如何创建开发证书和分配私钥
现在我已完成开发过程并开始分发
我创建了"分发证书",但如何为此证书分配私钥?
当编译时出现"CodeSign错误:代码签名身份'......'与您的钥匙串中的任何代码签名证书不匹配"
如果我需要为分发证书分配私钥以及如何分配,我很高兴现在就让我.
请注意,我不是在谈论开发证书,谢谢.
我有这样的代码:
public abstract class Base
{
// is going to be used in deriving classes
// let's assume foo is threadsafe
protected static readonly Foo StaticFoo = new Foo();
}
Run Code Online (Sandbox Code Playgroud)
Visual Studio 2008的代码分析弹出以下消息:
CA2104 : Microsoft.Security : Remove the read-only designation from 'Base.StaticFoo' or change the field to one that is an immutable reference type. If the reference type 'Foo' is, in fact, immutable, exclude this message.
我的设计是否存在本质上的缺陷,或者我可以[SuppressMessage]在源代码中添加一个?
我有一个文本框,用户可以输入包含html标记的文本.
当然,当页面执行涉及回发的任何操作时,它会中断(错误500),因为解析器认为文本框中的html代码是黑客尝试.
现在,我知道有一种方法可以允许它,但我不能为我的生活记住.
救命?
我正在使用Visual Studio 2008,VB.NET,以防它相关.
享受随机
asp.net ×2
c++ ×2
assembly ×1
c# ×1
certificate ×1
classname ×1
declaration ×1
distribution ×1
dword ×1
html ×1
iphone ×1
locking ×1
oauth ×1
pointers ×1
private-key ×1
python ×1
resources ×1
rest ×1
syntax ×1
twitter ×1
utf-8 ×1
visual-c++ ×1
web-services ×1
x86 ×1