我有一个声明如下的字符串:
string query = "INSERT INTO tblVehicle (OVImage) VALUES ('";
query += decodedData;
query += "')";
(其中'decodingData'是一个包含Base64数据的字符串) 当我使用此代码将其转换为'CString'时
CString cQuery = query.c_str();
我在“CQuery”中得到了这一行:
"INSERT INTO tblVehicle (OVImage) VALUES ('ÿØÿà"
并且字符串的其余部分不在'CQuery'中。我该怎么办才能在CString中使用长文本?
答案 0 :(得分:0)
每当你看到一个字符串突然“结束”时,你可以推断出那个源字符串中有一个空字符(0)。 C字符串也称为以空字符结尾的字符串,因为第一个空字符表示数据的结尾。 std::string
容忍这些,但当你将它粘贴到CString
时,它会在那时被切断,因为数据中的空值告诉它停在那里。
decodedData
不包含有效的base64数据;它似乎只是二进制数据。将二进制数据转换为字符串会导致随机的空字符,因此对于CString来说是不可取的。只看“ÿØÿà”,很明显它不是普通的base64字符串,因为base64字符串通常包含A-Z,a-z,0-9,+和/。 https://en.wikipedia.org/wiki/Base64。由于正确的Base64字符串不包含null,因此不会发生此问题。
编辑:关于base64字符串的问题...从字符串中删除空值的一种简单方法是将它们全部替换掉。假设decodedData
是一个字符串......
std::replace(decodedData.begin(), decodedData.end(), '\0', '!');
然后你可以告诉出现在哪里的空值。但是你应该弄清楚这可能是有原因的。