我有一个遗留应用程序只是开始行为不端,无论出于何种原因我不确定.它会生成一堆HTML,并由ActivePDF转换为PDF报告.
这个过程是这样的:
在那个混乱的地方,HTML模板(
s)中的不间断空格编码为ISO-8859-1,因此在浏览器(FireFox)中查看文档时它们会错误地显示为"Â"字符.ActivePDF会对这些非UTF8字符产生影响.
我的问题:既然我不知道问题出在哪里,也没有时间去研究它,是否有一种简单的方法可以重新编码或找到并替换坏字符?我已经尝试通过我扔在一起的这个小功能发送它,但它把它变成了gobbledegook并没有改变任何东西.
Private Shared Function ConvertToUTF8(ByVal html As String) As String
Dim isoEncoding As Encoding = Encoding.GetEncoding("iso-8859-1")
Dim source As Byte() = isoEncoding.GetBytes(html)
Return Encoding.UTF8.GetString(Encoding.Convert(isoEncoding, Encoding.UTF8, source))
End Function
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
编辑:
我现在正在接受这个,虽然它似乎不是一个好的解决方案:
Private Shared Function ReplaceNonASCIIChars(ByVal html As String) As String
Return Regex.Replace(html, "[^\u0000-\u007F]", " ")
End Function
Run Code Online (Sandbox Code Playgroud) 我已经搜索了这个主题,我看了每个答案,但我仍然没有得到它.
基本上我需要将UTF-8字符串转换为ISO-8859-1,我使用以下代码:
Encoding iso = Encoding.GetEncoding("ISO-8859-1");
Encoding utf8 = Encoding.UTF8;
string msg = iso.GetString(utf8.GetBytes(Message));
Run Code Online (Sandbox Code Playgroud)
我的源字符串是
Message = "ÄäÖöÕõÜü"
Run Code Online (Sandbox Code Playgroud)
但不幸的是我的结果字符串变成了
msg = "�ä�ö�õ�ü
Run Code Online (Sandbox Code Playgroud)
我在这里做错了什么?
有谁知道如何将字符串从ISO-8859-1转换为UTF-8并返回Java?
我从网上获取一个字符串并将其保存在RMS(J2ME)中,但我想保留特殊字符并从RMS获取字符串,但使用ISO-8859-1编码.我该怎么做呢?
我试图将UTF-8中编码的字符串转换为ISO-8859-1.比如说,在字符串'âabcd''中,在ISO-8859-1中表示为E2.在UTF-8中,它表示为两个字节.C3 A2我相信.当我执行getbytes(编码)然后使用ISO-8859-1编码中的字节创建一个新字符串时,我得到两个不同的字符.¢?.有没有其他方法可以做到这一点,以保持角色相同,即âabcd?
我有一个包含表单的页面.此页面的内容类型为text/html; charset = utf-8.我需要使用ISO-8859-1字符编码将此表单提交给服务器.这可能是Internet Explorer吗?
将accept-charset属性设置为表单元素,就像这样,适用于Firefox,Opera等,但不适用于IE.
<form accept-charset="ISO-8859-1">
...
</form>
Run Code Online (Sandbox Code Playgroud)
编辑:此表单由服务器A创建,并将提交给服务器B.我无法控制服务器B.
如果我将服务器A设置为使用charset ISO-8859-1提供内容,一切正常,但我正在寻找一种方法来使这项工作无需更改服务器A的编码.我有另一个关于在服务器A中设置编码的问题.
我想写出一个文本文件.
而不是默认的UTF-8,我想把它编码为ISO-8859-1编码,这是代码页28591.我不知道如何做到这一点......
我用以下非常简单的代码写出我的文件:
using (StreamWriter sw = File.CreateText(myfilename))
{
sw.WriteLine("my text...");
sw.Close();
}
Run Code Online (Sandbox Code Playgroud) 我的一些脚本使用不同的编码,当我尝试将它们组合时,这就成了一个问题.
但是我不能改变他们使用的编码,而是想要从脚本A更改结果的编码,并将其用作脚本B中的参数.
那么:有没有简单的方法可以在PHP中将字符串从UTF-8更改为ISO-88591?我看过utf_encode和_decode,但是他们没有做我想要的.为什么不存在任何"utf2iso()" - 函数或类似的东西?
我不认为我的字符不能用ISO格式编写,所以这不应该是一个大问题.
直到今天我才意识到我在PHP脚本中遗漏了这个:
mysql_set_charset('utf8');
Run Code Online (Sandbox Code Playgroud)
我的所有表都是InnoDB,排序规则"utf8_unicode_ci",我所有的VARCHAR列都是"utf8_unicode_ci".我有mb_internal_encoding('UTF-8');
我的PHP脚本,我的所有PHP文件都编码为UTF-8.
所以,直到现在,每次我用变音符号"插入"某些东西,例如:
mysql_query('INSERT INTO `table` SET `name`="Jáuò Iñe"');
Run Code Online (Sandbox Code Playgroud)
在这种情况下,'name'内容将是:Jáuò Iñe
.
由于我在PHP和MySQL之间修复了字符集,因此新的INSERT现在可以正确存储.但是,我想修复目前"混乱"的所有旧行.我已经尝试了很多东西,但它总是打破第一个"非法"角色的字符串.这是我目前的代码:
$m = mysql_real_escape_string('¿<?php echo "¬<b>\'PHP á (á)??riî? </b>"; ?> ?-?i abcdd;//;ñç´????????ç?â????????????ñ ;');
mysql_set_charset('utf8');
mysql_query('INSERT INTO `table` SET `name`="'.$m.'"');
mysql_set_charset('latin1');
mysql_query('INSERT INTO `table` SET `name`="'.$m.'"');
mysql_set_charset('utf8');
$result = mysql_iquery('SELECT * FROM `table`');
while ($row = mysql_fetch_assoc($result)) {
$message = $row['name'];
$message = mb_convert_encoding($message, 'ISO-8859-15', 'UTF-8');
//$message = iconv("UTF-8", "ISO-8859-1//IGNORE", $message);
mysql_iquery('UPDATE `table` SET `name`="'.mysql_real_escape_string($message).'" WHERE `a1`="'.$row['a1'].'"');
}
Run Code Online (Sandbox Code Playgroud)
除了在字符"ă"之后字符串被截断之外,它还使用期望的字符"UPDATE".我的意思是,字符串中不包含该字符和后续字符.
此外,使用"iconv()"(在代码上注释)进行测试也是如此,即使使用// IGNORE和// TRANSLIT也是如此
我还测试了ISO-8859-1和ISO-8859-15之间的几个字符集.
我真的需要帮助!谢谢.
我正在编写一个与使用ISO-8859-1的网站配合使用的Chrome扩展程序.只是为了给出一些背景信息,我的扩展功能是通过添加更方便的帖子表单来更快地在网站的论坛中发帖.然后通过Ajax调用(使用jQuery)发送写入消息的textarea的值.
如果邮件包含á
这些字符,则在发布的邮件中显示为Ã.强制浏览器显示UTF-8而不是ISO-8859-1使得á
显示正确.
我的理解是Javascript使用UTF-8作为其字符串,因此我的理论是,如果我在发送之前将字符串转码为ISO-8859-1,它应该可以解决我的问题.然而似乎没有直接的方法在Javascript中进行这种转码,我无法触及服务器端代码.有什么建议?
我已经尝试将创建的表单设置为使用iso-8859-1,如下所示:
var form = document.createElement("form");
form.enctype = "application/x-www-form-urlencoded; charset=ISO-8859-1";
Run Code Online (Sandbox Code Playgroud)
并且:
var form = document.createElement("form");
form.encoding = "ISO-8859-1";
Run Code Online (Sandbox Code Playgroud)
但这似乎不起作用.
编辑:
问题实际上是jQuery如何对消息进行urlencoding(或者其他方面),我通过告诉jQuery不处理数据并自己完成这个来解决这个问题,如下面的代码片段所示:
function cfaqs_post_message(msg) {
var url = cfaqs_build_post_url();
msg = escape(msg).replace(/\+/g, "%2B");
$.ajax({
type: "POST",
url: url,
processData: false,
data: "message=" + msg + "&post=Preview Message",
success: function(html) {
// ...
},
dataType: "html",
contentType: "application/x-www-form-urlencoded"
});
}
Run Code Online (Sandbox Code Playgroud) javascript utf-8 iso-8859-1 transcoding google-chrome-extension
iso-8859-1 ×10
utf-8 ×8
encoding ×5
c# ×2
html ×2
java ×2
php ×2
.net ×1
forms ×1
java-me ×1
javascript ×1
mysql ×1
transcoding ×1
vb.net ×1