当使用php include函数时,include成功执行,但是在输出include的输出之前它也输出一个char,char是十六进制值3F而我不知道它来自哪里,虽然它似乎每个包含都会发生.
起初我认为它是文件编码,但这似乎不是一个问题.我已经创建了一个测试用例来演示它:( 链接不再有效)http://driveefficiently.com/testinclude.php此文件仅包含:
<? include("include.inc"); ?>
Run Code Online (Sandbox Code Playgroud)
和include.inc仅包含:
<? echo ("hello, world"); ?>
Run Code Online (Sandbox Code Playgroud)
然而,输出是:"你好,世界"在哪里?是一个具有随机值的char.正是这个价值我不知道它的起源,它有时会搞砸我的网站.
关于这可能来自哪里的任何想法?起初我以为它可能与文件编码有关,但我不认为这是一个问题.
假设我有这个代码:
String encoding = "UTF-16";
String text = "[Hello StackOverflow]";
byte[] message= text.getBytes(encoding);
Run Code Online (Sandbox Code Playgroud)
如果我在消息中显示字节数组,结果是:
0000 FE FF 00 5B 00 48 00 65 00 6C 00 6C 00 6F 00 20 ...[.H.e.l.l.o.
0010 00 53 00 74 00 61 00 63 00 6B 00 4F 00 76 00 65 .S.t.a.c.k.O.v.e
0020 00 72 00 66 00 6C 00 6F 00 77 00 5D .r.f.l.o.w.]
Run Code Online (Sandbox Code Playgroud)
如您所见,开始时有一个BOM.
我怎么能够:
当我通过字符串从文件字符串中读取时,>> operation获取第一个字符串,但它以"i"开头.假设第一个字符串是"street",而不是"istreet".
其他字符串也没关系.我尝试了不同的txt文件.结果是一样的.第一个字符串以"i"开头.问题是什么?
这是我的代码:
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
using namespace std;
int cube(int x){ return (x*x*x);}
int main(){
int maxChar;
int lineLength=0;
int cost=0;
cout<<"Enter the max char per line... : ";
cin>>maxChar;
cout<<endl<<"Max char per line is : "<<maxChar<<endl;
fstream inFile("bla.txt",ios::in);
if (!inFile) {
cerr << "Unable to open file datafile.txt";
exit(1); // call system to stop
}
while(!inFile.eof()) {
string word;
inFile >> word;
cout<<word<<endl;
cout<<word.length()<<endl;
if(word.length()+lineLength<=maxChar){
lineLength +=(word.length()+1);
}
else {
cost+=cube(maxChar-(lineLength-1));
lineLength=(word.length()+1); …Run Code Online (Sandbox Code Playgroud) 我正在使用ajax请求向DB发送注释.成功的反应标志着
1. OK
Run Code Online (Sandbox Code Playgroud)
问题实际上是来自php脚本的响应
1.
2. OK
Run Code Online (Sandbox Code Playgroud)
所以我调试了脚本并注意到当脚本执行以下行时添加了换行符:
require_once($ABS_APPS."/quotes/classQuote.php");
Run Code Online (Sandbox Code Playgroud)
经过一些搜索后,我读到它可能是BOM(字节顺序标记)问题.所以我只是classQuote.php用十六进制编辑器下载并打开文件,注意到没有BOM ...有人可以帮我吗?
PS我的项目中的所有文件都包含在UTF-8中,我目前是usint NetBeans,它不会将BOM添加到文件中.
这是有罪的脚本:
// Send new comment to DB
case "send":
$notification = new Notification();
if($comment->insert($_POST["username"], $_POST["comment"], $_POST["app"], $_POST["entryId"])){
switch ($_POST["app"]) {
case "quotes":
require_once($ABS_APPS."/quotes/classQuote.php");
$quote = new Quote();
$quoteData = $quote->get($_POST["entryId"]);
// If user comments his own entry we don't have to send the notification
if($quoteData["UserAuthor"] != $_SESSION["User"]){
$notification->newComment($_POST["username"], $quoteData["UserAuthor"], $_POST["entryId"], $_POST["app"]);
}
break;
default:
break;
}
echo "OK";
} else {
echo "ERROR";
}
break;
Run Code Online (Sandbox Code Playgroud) 我的Java EE Web应用程序使用XSLT转换来生成CSV报告。如果我指定“UTF-16”作为对XSLT的编码(这似乎是处理在XML重音符号的唯一途径),那么我会在CSV输出的开始字节顺序标记字符
从我了解,这是正确的行为。问题是,如果在Excel中打开CSV(显示为:þÿ),则该BOM字符可见;但是,如果我在适当的文本编辑器中打开它,则该BOM字符不可见;)
如何隐藏或忽略此字符,使其不可见在Excel中打开文件时?
如何在StringBuilder中添加字节顺序标记?(我必须将一个字符串传递给另一个将其保存为文件的方法,但我无法修改该方法).
我试过这个:
var sb = new StringBuilder();
sb.Append('\xEF');
sb.Append('\xBB');
sb.Append('\xBF');
Run Code Online (Sandbox Code Playgroud)
但是当我用十六进制编辑器查看它时,它会添加以下序列:
C3 AF C2 BB C2 BF
字符串很大,所以不用来回转换为字节数组就可以了.
编辑: 在评论中提问后澄清.我必须将字符串传递给另一个接受字符串的方法,并在Azure Blob存储上创建它的文件.我无法修改其他方法.
我需要在Windows 7机器上生成一些带有CRLF行分隔符的UTF-16LE编码文件.(目前有草莓5.20.1)
在获得正确的输出之前我需要很长时间才能搞清楚,我想知道我的解决方案是否是正确的方法,因为它在Perl上的其他语言看起来过于复杂.特别是:
encoding(UTF-16)而如果我使用UTF-16LE或UTF-16BE不使用其他软件包,则没有BOM File::BOM?CRLF处理似乎有错误(它输出0D 0A 00而不是0D 00 0A 00)没有过滤器的一些麻烦?我怀疑这对于拥有这么多用户的语言来说可能是一个真正的错误......以下是我的评论尝试,我发现正确的是最后的陈述
use strict;
use warnings;
use utf8;
use File::BOM;
use feature 'say';
my $UTF;
my $data = "Hello, héhé, ??.\nsecond line : my 2€"; # ?? = zhong wen = chinese
# UTF16 BE + BOM but incorrect CRLF: "0D 0A 00" instead of "0D 00 0A 00"
open $UTF, ">:encoding(UTF-16)", "utf-16-std-be.txt" or die $!; …Run Code Online (Sandbox Code Playgroud) 我在编写过滤程序时遇到问题.它通过读取文件的前5个字节并将其与固定缓冲区进行比较来检测文件是否为PDF文档:
25 50 44 46 2D
这工作正常,除了我看到一些以字节顺序标记开头的文件:
EF BB BF 25 50 44 46 2D
^-------^
我想知道PDF规范是否真的允许这样做.如果我查看该文档的第7.5节,我将其读作"否":
PDF文件的第一行应为包含5个字符%PDF的标题,后跟1.N形式的版本号,其中N是0到7之间的数字
然而,我在野外看到这些文档,用户感到困惑,因为PDF阅读器程序可以通过我的过滤器拒绝它们来打开这些文档.
那么:PDF文档开头是否允许BOM标记?(我不是在谈论字符串对象,而是PDF文件本身)
我从这里下载文件“ pi_million_digits.txt”:
https://github.com/ehmatthes/pcc/blob/master/chapter_10/pi_million_digits.txt
然后,我使用以下代码打开并阅读它:
filename = 'pi_million_digits.txt'
with open(filename) as file_object:
lines = file_object.readlines()
pi_string = ''
for line in lines:
pi_string += line.strip()
print(pi_string[:52] + "...")
print(len(pi_string))
Run Code Online (Sandbox Code Playgroud)
但是,产生的输出是正确的,除了它之前带有相同的奇怪符号:“3.141 ....”
是什么导致这些奇怪的符号?我正在剥线,所以我希望这些符号会被删除。
我有LazyByteString可能从BOM开始.从中删除BOM的最简单,最有效的方法是ByteString什么?