小程序
小游戏
企业微信
微信支付
扫描小程序码分享
wx.writeBLECharacteristicValue
打印中文乱码,如题
4 个回答
加粗
标红
插入代码
插入链接
插入图片
上传视频
我的解决办法是再github上找到了这个大佬的开源项目。希望对大家有所帮助。
https://github.com/benioZhang/miniprogram-bluetoothprinter
小程序蓝牙打印
你好,麻烦通过点击下方“反馈信息”按钮,提供出现问题的。
楼主用你的方法中文还是打不了,是空白,中文直接被去掉了,难道是我们的gbk转码文件不一样,还是和打印机有关系呢
你调用的我上面说的哪个方法呢 调用第一个混杂方法就能处理了
还有就是查看打印机支持的编码,最好询问厂商
我之前发的博客介绍了 你看看
csdn
我就用的混杂的,可能是我票据打印机的问题
gbk转码的文件是这个的 https://gist.github.com/oldj/eb7f3037a5665d853bd8
你先问问你们蓝牙打印机支持的编码这样子,然后在检查一下代码 gbk应该是一样的,有需要的话你加我 我传给你 1069430666
好的,我退掉了,我买了另外一个试试,也是看到其他帖子里发的链接https://item.jd.com/28687083276.html
介绍说支持微信
已解决。蓝牙打印机所支持的编码不同,处理的方法也不同
//混杂
function
hexStringToBuff(str){
//str='中国:WXHSH'
const buffer =
new
ArrayBuffer((sumStrLength(str)) + 1)
const dataView =
DataView(buffer)
var
data=str.toString();
p = 0;
//ArrayBuffer 偏移量
for
(
i=0;i<data.length;i++){
if
(isCN(data[i])){
//是中文
//调用GBK 转码
t = gbk.$URL.encode(data[i]);
j = 0; j < 2; j++) {
temp = parseInt(t[j * 2] + t[j * 2 + 1], 16)
dataView.setUint8(p++, temp)
}
else
{
temp = parseInt(data.charCodeAt(i).toString(16), 16)
dataView.setUint8(p++,temp)
dataView.setUint8(p++, 0x0a)
return
buffer;
//计算arraybuffer的长度
sumStrLength(str){
length=0;
data = str.toString();
i = 0; i < data.length; i++) {
(isCN(data[i])) {
length += 2;
length += 1;
length;
//js正则验证中文
isCN(str){
(/^[\u3220-\uFA29]+$/.test(str)) {
true
;
false
//汉字转码
hexStringToArrayBuffer(str){
ArrayBuffer((str.length / 2) + 1)
i = 0; i < str.length / 2; i++) {
temp = parseInt(str[i * 2] + str[i * 2 + 1], 16)
dataView.setUint8(i, temp)
dataView.setUint8((str.length / 2), 0x0a)
//不带有汉字
hexStringToArrayBufferstr(str){
let val =
""
(let i = 0; i < str.length; i++) {
(val ===
''
) {
val = str.charCodeAt(i).toString(16)
val +=
','
+ str.charCodeAt(i).toString(16)
","
+
"0x0a"
console.log(val)
// 将16进制转化为ArrayBuffer
Uint8Array(val.match(/[\da-f]{2}/gi).map(
(h) {
parseInt(h, 16)
})).buffer
大佬,留个联系方式。我遇到乱码的问题了。但是还没有解决。
麻烦能提供能复现问题的代码片段(https://developers.weixin.qq.com/miniprogram/dev/devtools/minicode.html)
关注后,可在微信内接收相应的重要提醒。
请使用微信扫描二维码关注 “微信开放社区” 公众号
我的解决办法是再github上找到了这个大佬的开源项目。希望对大家有所帮助。
小程序蓝牙打印
楼主用你的方法中文还是打不了,是空白,中文直接被去掉了,难道是我们的gbk转码文件不一样,还是和打印机有关系呢
你调用的我上面说的哪个方法呢 调用第一个混杂方法就能处理了
还有就是查看打印机支持的编码,最好询问厂商
我之前发的博客介绍了 你看看
csdn
我就用的混杂的,可能是我票据打印机的问题
gbk转码的文件是这个的 https://gist.github.com/oldj/eb7f3037a5665d853bd8
你先问问你们蓝牙打印机支持的编码这样子,然后在检查一下代码 gbk应该是一样的,有需要的话你加我 我传给你 1069430666
好的,我退掉了,我买了另外一个试试,也是看到其他帖子里发的链接https://item.jd.com/28687083276.html
介绍说支持微信
已解决。蓝牙打印机所支持的编码不同,处理的方法也不同
//混杂
function
hexStringToBuff(str){
//str='中国:WXHSH'
const buffer =
new
ArrayBuffer((sumStrLength(str)) + 1)
const dataView =
new
DataView(buffer)
var
data=str.toString();
var
p = 0;
//ArrayBuffer 偏移量
for
(
var
i=0;i<data.length;i++){
if
(isCN(data[i])){
//是中文
//调用GBK 转码
var
t = gbk.$URL.encode(data[i]);
for
(
var
j = 0; j < 2; j++) {
var
temp = parseInt(t[j * 2] + t[j * 2 + 1], 16)
dataView.setUint8(p++, temp)
}
}
else
{
var
temp = parseInt(data.charCodeAt(i).toString(16), 16)
dataView.setUint8(p++,temp)
}
}
dataView.setUint8(p++, 0x0a)
return
buffer;
}
//计算arraybuffer的长度
function
sumStrLength(str){
var
length=0;
var
data = str.toString();
for
(
var
i = 0; i < data.length; i++) {
if
(isCN(data[i])) {
//是中文
length += 2;
}
else
{
length += 1;
}
}
return
length;
}
//js正则验证中文
function
isCN(str){
if
(/^[\u3220-\uFA29]+$/.test(str)) {
return
true
;
}
else
{
return
false
;
}
}
//汉字转码
function
hexStringToArrayBuffer(str){
const buffer =
new
ArrayBuffer((str.length / 2) + 1)
const dataView =
new
DataView(buffer)
for
(
var
i = 0; i < str.length / 2; i++) {
var
temp = parseInt(str[i * 2] + str[i * 2 + 1], 16)
dataView.setUint8(i, temp)
}
dataView.setUint8((str.length / 2), 0x0a)
return
buffer;
}
//不带有汉字
function
hexStringToArrayBufferstr(str){
let val =
""
for
(let i = 0; i < str.length; i++) {
if
(val ===
''
) {
val = str.charCodeAt(i).toString(16)
}
else
{
val +=
','
+ str.charCodeAt(i).toString(16)
}
}
val +=
","
+
"0x0a"
;
console.log(val)
// 将16进制转化为ArrayBuffer
return
new
Uint8Array(val.match(/[\da-f]{2}/gi).map(
function
(h) {
return
parseInt(h, 16)
})).buffer
}
大佬,留个联系方式。我遇到乱码的问题了。但是还没有解决。
麻烦能提供能复现问题的代码片段(https://developers.weixin.qq.com/miniprogram/dev/devtools/minicode.html)