因为我已经将yii应用程序移动到另一个共享主机,并且应用程序是runnig ... index.php?r =使用登录凭据的站点/登录我得到了warnig:
session_regenerate_id(): Cannot regenerate session id - headers already sent
Run Code Online (Sandbox Code Playgroud)
该actionLogin"的代码:
public function actionLogin($name = null )
{
$model=new LoginForm;
if ($name) $model->username = $name;
if(isset($_POST['ajax']) && $_POST['ajax']==='login-form')
{
echo CActiveForm::validate($model);
Yii::app()->end();
}
if(isset($_POST['LoginForm']))
{
$model->attributes=$_POST['LoginForm'];
// validate user input and redirect to the previous page if valid
if (headers_sent($filename, $linenum))
{
echo "Headers have been sent in {$filename} line number is {$linenum}\n"
exit;
}
if($model->validate() && $model->login())
$this->redirect(Yii::app()->user->returnUrl);
}
// display the login form …Run Code Online (Sandbox Code Playgroud) 我正在保存一个外部工具使用的 XML 文件。
遗憾的是,该工具无法理解EF BB BF文件开头的编码 BOM(字节顺序标记:):
<?xml version="1.0" encoding="UTF-8"?>
...
00000000h: EF BB BF 3C 3F 78 6D 6C 20 76 65 72 73 69 6F 6E <?xml version
00000010h: 3D 22 31 2E 30 22 20 65 6E 63 6F 64 69 6E 67 3D ="1.0" encoding=
00000020h: 22 55 54 46 2D 38 22 3F 3E ... "UTF-8"?>
Run Code Online (Sandbox Code Playgroud)
我的代码:
XmlDocument doc = new XmlDocument();
// Stuff...
using (TextWriter sw = new StreamWriter(file, false, Encoding.UTF8)) { …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 FileReader 读取文件并将它们写入一个单独的文件。
这些文件是 UTF-8 编码的,但不幸的是,其中一些文件仍然包含 BOM。
我试过的相关代码是这样的:
private final String UTF8_BOM = "\uFEFF";
private String removeUTF8BOM(String s)
{
if (s.startsWith(UTF8_BOM))
{
s=s.replace(UTF8_BOM, "");
}
return s;
}
line=removeUTF8BOM(line);
Run Code Online (Sandbox Code Playgroud)
但由于某种原因,BOM 没有被删除。有没有其他方法可以用 FileReader 做到这一点?我知道 BOMInputStream 应该可以工作,但我更愿意使用 FileReader 找到解决方案。
我试图弄清楚如何在使用 Apache 给出的示例时简单地排除 BOM。我正在从内部存储读取文件并首先将其转换为String. 然后我将其转换为ByteArray这样我就得到了一个InputStream. 然后我检查BOMInputStreamBOM,因为我遇到了“意外令牌”错误。现在我不知道如何排除 BOM(如果有的话)。
代码:
StringBuffer fileContent = new StringBuffer("");
String temp = "";
int ch;
try{
FileInputStream fis = ctx.openFileInput("dataxml");
try {
while( (ch = fis.read()) != -1)
fileContent.append((char)ch);
temp = temp + Character.toString((char)ch);
} catch (IOException e) {
e.printStackTrace();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
InputStream ins = new ByteArrayInputStream(temp.getBytes(StandardCharsets.UTF_8));
BOMInputStream bomIn = new BOMInputStream(ins);
if (bomIn.hasBOM()) {
// has a UTF-8 …Run Code Online (Sandbox Code Playgroud) 我在 python 中尝试这样做来获取字符串的长度(以字节为单位)。
>>> s = 'a'
>>> s.encode('utf-8')
b'a'
>>> s.encode('utf-16')
b'\xff\xfea\x00'
>>> s.encode('utf-32')
b'\xff\xfe\x00\x00a\x00\x00\x00'
>>> len(s.encode('utf-8'))
1
>>> len(s.encode('utf-16'))
4
>>> len(s.encode('utf-32'))
8
Run Code Online (Sandbox Code Playgroud)
utf-8使用一个字节来存储一个ascii字符,正如预期的那样,但是为什么utf-16使用4个字节呢?len() 到底测量什么?
我创建了一个批处理脚本,用于将 SQL 文件从文件夹复制到一个大 SQL 脚本中。问题是当我运行这个 SQL 脚本时,它出现错误
\n\n\n\n\n\'\' 附近的语法不正确
\n
我将一个 SQL 脚本复制到 Notepad++ 中并将编码设置为 ANSI。我在发生错误的行上看到此符号 \xc3\xaf\xc2\xbb\xc2\xbf (BOM)。
\n\n无论如何,我可以在批处理脚本中自动删除它吗?我不想每次运行此任务时都手动删除它。
\n\n以下是我目前拥有的批处理脚本
\n\n@echo off\n\nset "path2work=C:\\StoredProcedures"\ncd /d "%path2work%"\n\necho. > C:\\FinalScript\\AllScripts.sql\n\nfor %%a in (*.sql) do (\n\n echo. >>"C:\\FinalScript\\AllScripts.sql"\n echo GO >>"C:\\FinalScript\\AllScripts.sql"\n type "%%a">>"C:\\FinalScript\\AllScripts.sql"\n echo. >>"C:\\FinalScript\\AllScripts.sql"\n)\nRun Code Online (Sandbox Code Playgroud)\n 我构建了一个 System.Xml.XmlDocument 类型的 XML 对象。
$scheme.gettype()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True False XmlDocument System.Xml.XmlNode
Run Code Online (Sandbox Code Playgroud)
我使用 save() 方法将其保存到文件中。
$scheme.save()
Run Code Online (Sandbox Code Playgroud)
这将以带有 BOM 的 UTF-8 格式保存文件。BOM 会导致其他脚本出现问题。
当我们在 Notepad++ 中打开 XML 文件并将其保存为 UTF-8(不含 BOM)时,其他脚本不会出现问题。所以我被要求保存没有 BOM 的脚本。
保存方法的 MS 文档指出:
编码属性的值取自 XmlDeclaration.Encoding 属性。如果 XmlDocument 没有 XmlDeclaration,或者 XmlDeclaration 没有编码属性,则保存的文档也不会具有编码属性。
XmlDeclaration 上的 MS 文档列出了 UTF-8、UTF-16 等的编码属性。它没有提到 BOM。
XmlDeclaration 是否具有省略 BOM 的编码属性?
附言。此行为在 Powershell 5 和 Powershell 7 中是相同的。
我目前正在开发一个项目,该项目在本地工作得很好,但一旦我将其上传到托管服务器的服务器上,它就会抛出错误。我的托管商说这是文件内 BOM 的错误。如何在 VS Code 或 Brackets 中删除它们?
Powershell似乎是在使用unicode BOM的xml文件上进行抨击 - 代码:
$xml = [xml]{ get-content $filename }
Run Code Online (Sandbox Code Playgroud)
炸毁"根级数据无效".
有没有一个简单的方法来做到这一点,而不是摆弄文件的内容?
我有一个非常复杂的问题很难解释.互联网上有很多关于这方面的讨论,但没有任何确定性.非常感谢任何帮助,或比我更好的解释.
本质上,我只是尝试使用带有VBA的UTF-16编写XML文件.
如果我这样做:
sXML = "<?xml version='1.0' encoding='utf-8'?>"
sXML = sXML & rest_of_xml_document
Print #iFile, sXML
Run Code Online (Sandbox Code Playgroud)
然后我得到一个有效的XML文件.但是,如果我将"encoding ="更改为"utf-16",我会从XML验证器中收到此错误:
Switch from current encoding to specified encoding not supported.
谷歌搜索告诉我,这意味着xml编码属性与文件使用的ACTUAL编码不同,因此我必须通过打开和打印命令创建utf-8文档.
如果我这样做:
With CreateObject("ADODB.Stream")
.Type = 2
.Charset = "utf-16"
.Open
.WriteText sXML
.SaveToFile sFilename, 2
.Close
End With
Run Code Online (Sandbox Code Playgroud)
然后我在文件的开头有一些时髦的字符(BOM),导致它无法通过XML验证.
如果我在Notepad ++中打开文件,删除BOM并将编码更改为"UCS-2",然后文件使用"utf-16"编码值进行验证(意味着UCS-2足够接近UTF-16无关紧要,或者XML能够Switch from current encoding在这两种类型之间.
我需要使用UTF-16,因为UTF-8不包括我正在导出的演示文稿中使用的所有字符.
问题:
如何让VBA像Notepad ++一样运行,创建一个UTF-16编码的文本文件,而没有可以填充XML数据的BOM?任何帮助非常感谢!
byte-order-mark ×10
xml ×4
utf-8 ×3
java ×2
php ×2
powershell ×2
utf-16 ×2
.net ×1
android ×1
batch-file ×1
c# ×1
filereader ×1
macos ×1
python ×1
sessionid ×1
textwriter ×1
unicode ×1
vba ×1
xml-parsing ×1
yii ×1